H
hey-ho
Gast
Hallo,
ich möchte gerne mit einem SelectionListener die selektierte Zeile in einer JTable ausgegeben haben, bzw. den selektierten Datensatz bearbeiten, löschen... Meine Daten kommen aus einer Datenbank, werden über eine Datenklasse in einem Vector gespeichert und dann mittels dem TableModel in die JTable gebracht. Wenn die Tabelle sortiert wird, stimmt der Index der Tabellenzeile ja nicht mehr mit dem Index im Vector überein. Wenn ich nun in den Datenklassen im Vector die ID aus der Datenbank mitspeichere, kann ich dann über den SelectionListener auf diesen Wert zugreifen, auch wenn er nicht in einer Tabellenspalte angezeigt wird, sondern nur über den Vector zu holen wäre? Ich würde - wenn möglich - gerne die ID des Datenbanksatzes an einen Button übergeben, der diese Zeile z.B. dann in der Datenbank löscht.
Ich hoffe, ich hab mich jetzt nicht zu kompliziert augedrückt. Ich hab jetzt schon ewig im Internet nach Lösungen gesucht, werde aber irgendwie nicht richtig schlauer.
Als Beispielcode nun noch meine JTable-Klasse:
(Ist das was ich dort mit dem ListSelectionListener veranstalte überhaupt einigermassen richtig?)
Seltsam ist, dass mir die Testausgabe auf der Konsole zwar die richtige selektierte Zeile ausgibt, auch den ID-Wert der Datenbank, den ich mal testweise in eine Tabellenspalte gesteckt habe, aber die Ausgabe auf der Konsole wird viermal geschrieben...
Vielen Dank schonmal
hey-ho
ich möchte gerne mit einem SelectionListener die selektierte Zeile in einer JTable ausgegeben haben, bzw. den selektierten Datensatz bearbeiten, löschen... Meine Daten kommen aus einer Datenbank, werden über eine Datenklasse in einem Vector gespeichert und dann mittels dem TableModel in die JTable gebracht. Wenn die Tabelle sortiert wird, stimmt der Index der Tabellenzeile ja nicht mehr mit dem Index im Vector überein. Wenn ich nun in den Datenklassen im Vector die ID aus der Datenbank mitspeichere, kann ich dann über den SelectionListener auf diesen Wert zugreifen, auch wenn er nicht in einer Tabellenspalte angezeigt wird, sondern nur über den Vector zu holen wäre? Ich würde - wenn möglich - gerne die ID des Datenbanksatzes an einen Button übergeben, der diese Zeile z.B. dann in der Datenbank löscht.
Ich hoffe, ich hab mich jetzt nicht zu kompliziert augedrückt. Ich hab jetzt schon ewig im Internet nach Lösungen gesucht, werde aber irgendwie nicht richtig schlauer.
Als Beispielcode nun noch meine JTable-Klasse:
(Ist das was ich dort mit dem ListSelectionListener veranstalte überhaupt einigermassen richtig?)
Code:
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
public class PersonenTable extends JTable implements ListSelectionListener {
PersonenTableModel personenTableModel;
public PersonenTable(PersonenTableModel personenTableModel) {
this.personenTableModel = personenTableModel;
this.setModel(personenTableModel);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setAutoCreateRowSorter(true);
getTableHeader().setReorderingAllowed( false );
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
getSelectionModel().addListSelectionListener(this);
columnModel = getColumnModel();
columnModel.getColumn(0).setPreferredWidth(180);
columnModel.getColumn(1).setPreferredWidth(180);
columnModel.getColumn(2).setPreferredWidth(80);
columnModel.getColumn(3).setPreferredWidth(40);
DefaultTableCellRenderer rendererRight = new DefaultTableCellRenderer();
rendererRight.setHorizontalAlignment(SwingConstants.RIGHT);
columnModel.getColumn(2).setCellRenderer(rendererRight);
columnModel.getColumn(3).setCellRenderer(rendererRight);
}
public void valueChanged(final ListSelectionEvent e) {
int row = getSelectedRow();
System.out.println("Ausgewählte Zeile: " + row);
System.out.println("Eintrag in Spalte 4: " + personenTableModel.getValueAt(row,3).toString());
}
}
Seltsam ist, dass mir die Testausgabe auf der Konsole zwar die richtige selektierte Zeile ausgibt, auch den ID-Wert der Datenbank, den ich mal testweise in eine Tabellenspalte gesteckt habe, aber die Ausgabe auf der Konsole wird viermal geschrieben...
Vielen Dank schonmal
hey-ho