S
SlaterB
Gast
ich habe eine einfache JTable mit eigenem editierbaren TableModel,
wenn ich Felder editiere und mit der Maus ein anderes Feld anklicke, dann kann ich diese Änderungen bei einem Button-Klick auslesen,
wenn ich aber gerade in einem Feld drin bin und dieses ändere,
dann wird bei einem Mausklick und model.getValueAt(i,j) noch der alte Wert vor der Bearbeitung zurückgegeben,
was ist hier das geschickteste Vorgehen?,
kann man im ActionListener die Bearbeitung der JTable abschließen (Zugriff auf JTable und Model vorhanden)
oder kann man das ganze so konfigurieren, dass bei jeder Buchstabeneingabe das Model den aktuellen Wert erhält?
wenn ich Felder editiere und mit der Maus ein anderes Feld anklicke, dann kann ich diese Änderungen bei einem Button-Klick auslesen,
wenn ich aber gerade in einem Feld drin bin und dieses ändere,
dann wird bei einem Mausklick und model.getValueAt(i,j) noch der alte Wert vor der Bearbeitung zurückgegeben,
was ist hier das geschickteste Vorgehen?,
kann man im ActionListener die Bearbeitung der JTable abschließen (Zugriff auf JTable und Model vorhanden)
oder kann man das ganze so konfigurieren, dass bei jeder Buchstabeneingabe das Model den aktuellen Wert erhält?
Code:
public class TestGUI
extends JFrame
{
private TableModel m = new Model();
public TestGUI()
throws Exception
{
final JTable t = new JTable(m);
add(t, BorderLayout.CENTER);
JButton b = new JButton("Test");
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("data:");
for (int i = 0; i < m.getColumnCount(); i++)
{
for (int j = 0; j < m.getRowCount(); j++)
{
System.out.print(m.getValueAt(i, j) + " - ");
}
System.out.println();
}
}
});
add(b, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 200);
setVisible(true);
}
public static void main(String[] args)
throws Exception
{
new TestGUI();
}
}
class Model
extends AbstractTableModel
{
private String[][] data = new String[4][4];
public int getColumnCount()
{
return data[0].length;
}
public int getRowCount()
{
return data.length;
}
public String getColumnName(int columnIndex)
{
return "Test";
}
public Class getColumnClass(int columnIndex)
{
return String.class;
}
public Object getValueAt(int rowIndex, int columnIndex)
{
return data[rowIndex][columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return true;
}
public void setValueAt(Object value, int rowIndex, int columnIndex)
{
data[rowIndex][columnIndex] = (String)value;
}
}