1

我已经阅读TableModelListenerhttp://www.cs.auckland.ac.nz/compsci230s1c/lectures/xinfeng/swingmodelview.pdf)有一段时间了,我正在尝试实现Listener一个JTable使用AbstractTableModel. 为了解释我的课程的不同部分,我的课程。我的主要课程extends JFrameimplements 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);

}

4

0 回答 0