JTable最后一个值null

时间:2019-07-10 12:39:07

标签: java swing jtable

我正在创建一个小游戏。所以现在我有了一个只有5行的JTable。

DefaultTableModel dtm = (DefaultTableModel) usernameTable.getModel();
dtm.setColumnCount(1);
dtm.setRowCount(5);

单击按钮后,我要保存表中的值。我的问题是最后一个值是每次 null

示例

  表中的

Val:user1,user2,user3,user4,user5
  预期输出:[user1,user2,user3,user4,user5]
  输出:[user1,user2,user3,user4,null]

这就是我从表中获取数据的方式

ArrayList<String> username = new ArrayList<String>();

for (int i = 0; i < usernameTable.getRowCount(); i++) {
    username.add(usernamTable.getValueAt(i, 0);
}

可运行示例

public class JtableNullExample {
    private JTable usernameTable;
    private JPanel usernamePane;
    private JButton sendButton;
    private ArrayList<String> userList = new ArrayList<>();


    public static void main(String[] args) {
        new JtableNullExample();
    }

    public JtableNullExample() {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //Setting Table Model
        DefaultTableModel dtm = (DefaultTableModel) usernameTable.getModel();
        dtm.setColumnCount(1);
        dtm.setRowCount(5);

        frame.setContentPane(usernamePane);
        frame.setVisible(true);

        sendButton.addActionListener(e -> {

            for (int count = 0; count < usernameTable.getRowCount(); count++) {

                System.out.println(usernameTable.getValueAt(count, 0));
                userList.add(usernameTable.getValueAt(count, 0).toString());
            }

        });
    }
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。 问题是,JTable不知道我们是否完成了单元格的编辑。

if (usernameTable.isEditing()) {
   usernameTable.getCellEditor().stopCellEditing();
}

这将停止编辑单元格,现在您不再应该获得任何null值。

解决方案:
https://tips4java.wordpress.com/2008/12/12/table-stop-editing/

Jtable not returning the last cell value