Frage von Jibenni, 38

In Java neue Tabellenzeile auf Knopfdruck hinzufügen?

JTable table = new JTable(new DefaultTableModel(new Object[]{"name", "age", "size"}, 3)); DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addRow(new Object[]{"1","",""}); // das muss auf den button JButton buttonNewId = new JButton("New Id"); buttonNewId.addActionListener(new ButtonAction()); //meine classe ButtonAction ist der listener...wie setzt ich das oben auf den button? :/ hab alles richtig implementiert jFrame.add(buttonNewId);

Antwort
von spriday, 21

Trotz des schlecht formatierten Codes versuche ich es trotzdem mal:

JTable table = new JTable(new DefaultTableModel(new Object[]{"name", "age", "size"}, 3));
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(new Object[]{"1","",""}); // das muss auf den button JButton 
buttonNewId = new JButton("New Id"); 
buttonNewId.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // ...
    }
});

Du kannst nicht einfach einen ActionListener mit einem Standardkonstruktor einer ButtonAction übergeben, du musst den Listener schon spezifizieren. Außerdem muss eine Methode, wie z.B. mouseClicked verwendet werden.

Kommentar von KnusperPudding ,
buttonNewId.addMouseListener(new MouseAdapter() {

Für einen Button bitte keinen Mouselistener. Actionlistener wäre schon korrekt.

Außerdem muss eine Methode, wie z.B. mouseClicked verwendet werden.

Man muss keine Methode verwenden. - Es sind die Methoden des Interfaces (Hier: Des Listeners) zu implementieren.

Kommentar von spriday ,

In dieser Situation ist es ja auch vollkommen egal, ob man jetzt die Klasse einen Listener implementieren lässt oder den einzelnen Komponenten Listenern zuweist.

Kommentar von KnusperPudding ,

Es ist immer eine Design-Frage, ob man dafür eine eigene Klasse machen will, die einen Listener implementiert oder man den Listener als anonyme innere Klasse implementiert.

Aufgrund des geringen Umfangs des Listeners aber wohl eher letzteres.

In der zu implementierenden Methode: actionPerformed ist doch nur diese Zeile zu setzen:

model.addRow(new Object[]{"1","",""});
Expertenantwort
von KnusperPudding, Community-Experte für Java, 19

Wenn du dir Hilfe für dein Problem erhoffst, nim dir bitte wenigstens die Zeit deinen Code einerseits in einem lesbaren Format  zu posten* und andererseits ein vollständiges Beispiel beizutragen.*2

Also bitte Drücke auf "Bearbeiten" und korrigiere deine Frage.

* = Entweder du nutzt die GuteFrage-Code-Funktion oder du Hostest deinen Code bei einem Anbieter wie hastebin.com.

*2 = Um das ganze fehlt eine Klasse. Deine JTable ist nicht an den Frame angehängt, etc.

Kommentar von Jibenni ,

die anderen haben es auch hinbekommen xD

Kommentar von KnusperPudding ,

...Und sich genauso über über deine Bereitschaft beschwert.

die anderen

Im übrigen: Wer ist "die anderen"? - Ich sagte nicht, dass ich nicht helfe. - Sonst hätte ich bei der anderen Antwort auch nicht eingegriffen und ergänzt. - Schau mal genau hin, wen du als "die anderen" bezeichnest.

Nur wäre es einfach fair von dir als Fragesteller, die Frage lesbar zu stellen. Denn immerhin erwartest du auch Hilfe.

Sie kennen die Antwort?

Fragen Sie die Community