我已经阅读TableModelListener
(http://www.cs.auckland.ac.nz/compsci230s1c/lectures/xinfeng/swingmodelview.pdf)有一段时间了,我正在尝试实现Listener
一个JTable
使用AbstractTableModel
. 为了解释我的课程的不同部分,我的课程。我的主要课程extends JFrame
,implements TableModelListener
这就是为什么我有这个 tableChanged 方法。
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE)
System.out.println("It is updated");
if (e.getType() == TableModelEvent.DELETE)
System.out.println("It is deleted");
}
我的类 SwitchTableModel extends AbstractTableModel
- 它不是构造函数 - 创建一个表,其中显示一些从其他数组中获取的值。部分实现在这里Display the next row of a List in a JTable。
我使用构造函数调用 SwitchTableModel 类并创建 JTable 和 JFrame。
我还添加了这一行以获取更新值的时间。
public Object getValueAt(int rowIndex, int columnIndex) {
fireTableCellUpdated(rowIndex, columnIndex); ...
我希望能够编辑我的JTable
然后保存它的数据,但是虽然看起来我可以编辑它,但是当我在一个空字段中写入 smth 并按 Enter 键时,它不会保留数据。当我尝试在非空字段中更改 smth 时也会发生同样的情况。
实际上,使用此代码,它会在 JFrame 保持打开的整个过程中继续打印“已编辑”。
知道我可能做错了什么吗?
***** 编辑 ***** 我的构造函数是这样的:
final SwitchTableModel model = new SwitchTableModel(user_decide);
JTable table = new JTable(model);
JFrame frame = new JFrame ("Results");
table.getModel().addTableModelListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add (toolbar, BorderLayout.PAGE_START);
frame.getContentPane().add (
new JScrollPane(
table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED),
BorderLayout.CENTER);
//frame.add(checkPanel, BorderLayout.PAGE_END);
frame.pack();
frame.setVisible(true);
}