Ich versuche, eine JTable in IntelliJ mit zwei Spalten zu erstellen: eine ist ein Kontrollkästchen, und die andere ist eine Zeichenfolge. Ein Benutzer kann eine beliebige Zeichenfolge zur Tabelle hinzufügen, indem er eine JButton drückt, und jedes Mal, wenn die Schaltfläche gedrückt wird, wird eine neue Zeile zu der Tabelle hinzugefügt, in der die erste Spalte ein Kontrolle-Kästchen und die Sekunde die beliebige Zeichenfolge ist. Dies kann beliebig oft geschehen, indem der Tabelle eine beliebige Anzahl von Zeilen hinzugefügt wird. Wenn Sie auf die Kontrollkästchen klicken und eine Entfernen-Schaltfläche drücken, wird diese Zeile aus der Tabelle entfernt. Dieser ganze Prozess funktioniert gut, aber es ist nicht das, womit ich Probleme habe.Erstellen einer persistenten Referenz auf JTable-Daten
Jedes Mal, wenn der Benutzer die Schaltfläche drückt, um der Tabelle eine Zeichenfolge hinzuzufügen, möchte ich diese Zeichenfolge zu einem konsistenten Objekt/Container hinzufügen. So bei der Initialisierung des Objekt leer ist,
Object[][] tableData;
aber wenn die Taste gedrückt wird das Objekt jetzt die „Checkbox“ durch einen boolean enthält, dargestellt und die Zeichenfolge.
Object[][] tableData = {
{false, "String"}
}
Und das kann für eine Weile gehen.
Object[][] tableData = {
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"},
{false, "String"}
}
Und wenn eine der Boolesche Werte auf true geändert (über das Kontrollkästchen), und die Entfernen-Taste gedrückt wird, dann, dass bestimmte „Zeile“ oder Teil des Objekts gelöscht wird. Wie würde ich dieses Objekt oder diesen Container erstellen und verwalten? Gibt es einen besseren Weg, dies ohne ein Objekt zu tun?
Eine einfache Übersicht über das, was ich gerade habe, ist unten.
String colNames = {" ", "String"};
DefaultTableModel tableModel = new DefaultTableModel(colNames, 0);
importTable = new JTable(tableModel) {
@Override
public Class getColumnClass(int column) {
switch(column) {
case 0:
return Boolean.class;
default:
return String.class;
}
}
};
importButton.addActionListener(new ActionListener() {
public void actionPerofrmed(ActionEvent e) {
Object[][] newData = {
{false, "String"}
};
tableModel.addRow(newData[0]);
}
});
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < tableModel.getRowCount(); i++) {
Boolean checked = (Boolean) tableModel.getValueAt(i, 0);
if (checked) {
tableModel.removeRow(i);
i--;
}
}
}
});
Die Funktion "getValueAt" in DefaultTableModel funktionierte perfekt. Was deine Frage angeht, ich fürchte, ich kenne die Antwort darauf nicht. Das ist das erste Mal, dass ich so etwas in Java programmiere. – Kyleryan19