Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:AbstractTableModel中的JTable侦听器似乎不起作用_Java_Swing_Jtable_Listeners_Abstracttablemodel - Fatal编程技术网

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一切正常。