Java:AbstractTableModel中的JTable侦听器似乎不起作用
我已经阅读了一段时间关于Java:AbstractTableModel中的JTable侦听器似乎不起作用,java,swing,jtable,listeners,abstracttablemodel,Java,Swing,Jtable,Listeners,Abstracttablemodel,我已经阅读了一段时间关于TableModelListener(),我正在尝试为JTable实现一个Listener,它使用AbstractTableModel。 解释课程的不同部分。我的主类扩展了JFrame并实现了TableModelListener,所以我使用了这个tableChanged方法 @Override public void tableChanged(TableModelEvent e) { if (e.getType() == TableModelEvent.UPDA
TableModelListener
(),我正在尝试为JTable
实现一个Listener
,它使用AbstractTableModel
。
解释课程的不同部分。我的主类扩展了JFrame
并实现了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扩展了AbstractTableModel
——它不是构造函数——创建了一个表,其中显示了从其他数组获取的一些值。实现的一部分在这里
我使用构造函数调用SwitchTableModel类并创建JTable和JFrame
我还添加了此行,以便在值更新时获取
public Object getValueAt(int rowIndex, int columnIndex) {
fireTableCellUpdated(rowIndex, columnIndex); ...
我希望能够编辑我的JTable
,然后保存它的数据,但尽管我似乎可以编辑它,但当我在空字段中写入smth并按enter键时,它不会保留数据。当我尝试在非空字段中更改smth时,也会发生同样的情况
实际上,有了这段代码,它会在JFrame保持打开的整个时间内继续打印“Itisedited”
知道我做错了什么吗
*****编辑*****
我的构造函数是这样的:
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);
}将相关代码粘贴到此处。我只能说,创建表的模型是错误的。getValueAt()没有引发事件的理由:它不应该修改模型,而是从中获取值。您需要在表中注册侦听器-您能告诉我们您在哪里这样做吗?不需要在getValueAt()方法中调用fireTableCellUpdated(…)。这是在setVAlueAt()方法中完成的。如果您的代码不起作用,那么问题可能是您的自定义TableModel。张贴你的文章,说明问题所在。虽然更简单的解决方案可能只是使用DEfaultTableModel。@camickr我希望我可以使用DEfaultTableModel。但是,我使用这个是为了让我的UI一切正常。