2010-03-09 4 views
2

Je suis un débutant avec Java et a un problème que je ne peux pas résoudre.Ajouter au tableau avec actionlistener

J'essaie d'ajouter des chaînes à mon tableau, j'ai testé mon tableau pour que le travail. Mais mon problème est que j'ai créé un actionlistener et essaye d'obtenir le texte d'une autre classe et l'ajoute ensuite au tableau.

Mon buttonListener:

public class ButtonListener extends AddToLibrary implements ActionListener { 
public void actionPerformed(ActionEvent e) { 
    Database dt = new Database(); 
    dt.add(textType, textTitle, textSort, textDesc); 
} } 

Je suis un ami qui m'a dit que je suis en train de créer une nouvelle base de données chaque fois que j'appuie sur le bouton, mais comment dois-je faire si je veux juste « charger »? Peut effacer cette base de données est le nom de classe pour mon tableau. La partie la plus "amusante" de ceci est que quand je la lance en éclipse, elle va au débogueur sans me montrer quelque chose qui cloche, et à cause de mes connaissances limitées en java, c'est trop pour moi.

Mon buttonListener est geting les informations de AddToLibrary et il ressemble à ceci:

public class AddToLibrary extends JPanel{ 
public String textTitle; 
public String textSort; 
public String textDesc; 
public String textType; 

public AddToLibrary() { 
    // Förklarande text 
    JLabel titel = new JLabel("Titel"); 
    JLabel sort = new JLabel("Genre"); 
    JLabel desc = new JLabel("Beskriving"); 

    // Textrutor 
    JTextField textTitel = new JTextField(null, 20); 
    textTitel.setToolTipText("ex. Flickan som lekte med elden"); 
    JTextField textSort = new JTextField(null, 10); 
    textSort.setToolTipText("ex. Skräck, Action"); 
    JTextField textDesc = new JTextField(null, 15); 
    textDesc.setToolTipText("ex. Stieg Larsson"); 

    // Knappar 
    JButton addButton = new JButton("Lägg till"); 
    addButton.addActionListener(new ButtonListener());  //Lyssna på knapp 

    // Combobox 
    JComboBox comboBox = new JComboBox(); 
    comboBox.addItem("Film"); 
    comboBox.addItem("CD"); 
    comboBox.addItem("Bok"); 
    comboBox.addItem("Annat"); 

    // Lägg till i panelen 
    add(titel); 
    add(textTitel); 
    add(sort); 
    add(textSort); 
    add(desc); 
    add(textDesc); 
    add(comboBox); 
    add(addButton); 


} 

public String getTitelText(JTextField titelText) { 
    textTitle = "" + titelText.getText(); 
    return textTitle; 
} 

public String getDescText(JTextField descText) { 
    textDesc = "" + descText.getText(); 
    return textDesc; 
} 

public String getSortText(JTextField sortText) { 
    textSort = "" + sortText.getText(); 
    return textSort; 
} 

public String getTypeText(JComboBox comboBox) { 
    return textType = "" + (String) comboBox.getSelectedItem() + ".png"; 
} 
} 

Mais ça ne marche pas et je ne comprends pas pourquoi il nest pas travailler, donc si quelqu'un a un peu de temps à moi aider, je serait heureux.

Merci!

Répondre

0
public class ButtonListener extends AddToLibrary implements ActionListener { 
    private Database dt = new Database(); 
    public void actionPerformed(ActionEvent e) { 
     dt.add(textType, textTitle, textSort, textDesc); 
    } 
} 

devrait fonctionner. Ou mieux, la base de données doit être créée dans AddToLibrary et transmise à ButtonListener dans son constructeur. Désolé, je n'ai pas le temps de vérifier le code pour vous, mais si cela ne fonctionne pas, vous pouvez le notifier.

+0

Merci pour l'essai, mais il ne fonctionnera toujours pas, mais merci pour l'essai! – user290030

1

Une faute est ici:

public class ButtonListener extends AddToLibrary implements ActionListener { 

extension AddToLibrary crée un problème d'héritage bizarre.

La solution simple est de définir la ligne buttonListener:

final Database dt = new Database(); 
addButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      dt.add(getTypeText(comboBox), getTitelText(textTitel), getSortText(textSort), getDescText(textDesc)); 
     } 
}); // Lyssna på knapp 

Un changement important est de créer une instance de base de données à laquelle les chaînes sont ajoutées (comme Amit Kumar a déjà signalé).

Il y avait beaucoup de problèmes avec votre code, la plupart des constructions illégales. Mon conseil est d'obtenir un bon tutoriel/livre Java et de prendre connaissance de la façon dont ils résolvent les problèmes. Aussi, si vous utilisez Eclipse (ou un autre IDE moderne), il vous informera de toute construction illégale et essaiera de proposer des solutions. Une dernière note, les chaînes publiques et JTextField ont le même nom, cela crée un problème pour l'ordinateur car il ne sait pas lequel vous faites référence (ce que l'on appelle l'observation). Définissez des noms uniques pour chaque variable dans une classe afin de ne pas confondre le compilateur ou vous-même.

=====================================

Je l'ai fait un peu travailler sur votre code et je suis arrivé à ce qui suit.(Il peut être amélioré encore plus, mais c'est au moins beaucoup mieux en termes de légalité et de lisibilité)

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class AddToLibrary extends JPanel { 
    private static final long serialVersionUID = 1L; 

    private Database database = new Database(); 

    private JComboBox comboBox = new JComboBox(new String[]{"Film", "CD", "Bok", "Annat"}); 
    private JButton addButton = new JButton("Lägg till"); 

    private JTextField textTitel = new JTextField(null, 20); 
    private JTextField textSort = new JTextField(null, 10); 
    private JTextField textDesc = new JTextField(null, 15); 

    private JLabel titel = new JLabel("Titel"); 
    private JLabel sort = new JLabel("Genre"); 
    private JLabel desc = new JLabel("Beskriving"); 

    public AddToLibrary() { 
     textTitel.setToolTipText("ex. Flickan som lekte med elden"); 
     textSort.setToolTipText("ex. Skräck, Action"); 
     textDesc.setToolTipText("ex. Stieg Larsson"); 

     addButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       database.add(comboBox.getSelectedItem() + ".png", 
          textTitel.getText(), 
          textSort.getText(), 
          textDesc.getText() 
       ) 
      } 
     }); // Lyssna på knapp 

     // Lägg till i panelen 
     add(titel); 
     add(textTitel); 
     add(sort); 
     add(textSort); 
     add(desc); 
     add(textDesc); 
     add(comboBox); 
     add(addButton); 
    } 
} 
+0

Ahh, il est difficile de croire que ça fait presque la même chose, c'est beaucoup plus beau sur votre chemin, merci de prendre votre temps! – user290030

Questions connexes