无法将数据导入JTable

时间:2012-10-15 16:02:51

标签: java swing jtable actionlistener defaulttablemodel

当按钮添加时,我正在尝试将数据从JTextField提取到JTable

ActionListener

public void actionPerformed(ActionEvent evt) {
    Object src = evt.getSource();
    if (src == AddBtn) {
        System.out.println("HELLOO");
        String nextRowId = Integer.toString(model.getRowCount());
        model.addRow(new Object[] { nextRowId, LatText.getText(),
                LongText.getText(), EvlText.getText() });

    } else if (src == NextBtn) {

    } else if (src == perviousBtn) {

    }
}

JTable:

String columns[] = { "ID", "Name", "Age", "Gender" };
Object data[][] = { { "0", "Tom", new Integer(20), "Male" },
        { "1", "Tina", new Integer(18), "Female" },
        { "2", "Raj", new Integer(19), "Male" },
        { "3", "Tina", new Integer(18), "Female" },
        { "4", "Raj", new Integer(19), "Male" },
        { "5", "Tina", new Integer(18), "Female" }

};
DefaultTableModel model = new DefaultTableModel(data, columns);

完整代码:http://pastebin.com/9R9QyXdw

单击“添加”时没有任何反应。

修改

我已经纠正了这个:

 JTable dataTable = new JTable(model); 

但仍然没有添加数据。 谢谢。

4 个答案:

答案 0 :(得分:2)

没有任何反应的原因是您更新了未在TableModel上设置的JTable

您使用

JTable table = new JTable(data, columns);

构造表,而不是

JTable table = new JTable( model );

答案 1 :(得分:1)

我没有测试过您的代码,但是当您创建JTable时(从您的pastebin链接中读取),您可以使用以下行:

JTable table = new JTable(data, columns);

您应该指定模型而不是原始数据,对模型所做的修改将显示在您的表格中:

JTable table = new JTable (model);

答案 2 :(得分:1)

代码存在两个问题。

第一个已经被指出JTable table = new JTable(data, columns)基本上是构建它自己的模型,所以当你尝试在动作监听器中添加你的模型时,它与表所使用的模型不同。

另一种是你宣布模特两次。

您将模型声明为类全局字段DefaultTableModel model = new DefaultTableModel(data, columns),然后在addComponents方法中再次声明它...

    public void addComponentsToPane(final Container pane) {
            DefaultTableModel model = new DefaultTableModel(data, columns);

因此,即使您将表格声明为JTable table = new JTable(model),它仍会使用错误的模型..

按照描述更改表的声明,并删除DefaultTableModel方法中addComponentsToPane模型的声明,它应该可以正常工作......

答案 3 :(得分:0)

当我查看您的代码时,您还没有使用要更新到表中的TableModel。

如果您想通知您的JTable有关数据的更改,请使用 tableModel.fireTableDataChanged()

请参阅http://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html#fireTableDataChanged%28%29

在此处更新,立即查看 http://pastebin.com/bb00PzjD