1

我使用 NetBeans GUI 构建了一个 jTable,我想在类的构造函数中更新它。我打算在框架上添加一个搜索选项,所以整个更新想法对我来说非常重要。

我的代码:

    public availableTrumps(TrumpistClient TC){
    initComponents();
    availableTrumpsTrumpistClient=TC;
    String result=null;

    String query="SELECT * FROM APP.TRUMPS";

        result=this.availableTrumpsTrumpistClient.WritingReading("sql_select", query);

        if (result.contains("empty")){
            JOptionPane.showMessageDialog(this, "There are now trumps to show.");
        }
        else if (result.contains("error")){
            JOptionPane.showMessageDialog(this, "Error in the connection. Please try again.");
        }
        else{
            int i;
            String []data = result.split("\r\n");
            String [][] data2 = new String [data.length][];
            for (i = 0; i < data.length; i++)
            {
                data2[i] = data[i].split("&");
            }
            String[] columnNames = {"From", "To", "Departure Time", "Remaining Places", "Proposer", "ClosingTime", "Cost Per Seat" };
            this.jTable1 = new JTable(data2,columnNames);
            this.jTable1.setPreferredScrollableViewportSize(new Dimension(500,100));
            this.jTable1.setFillsViewportHeight(true);
            JScrollPane jps = new JScrollPane(jTable1);
            add(jps);
            jTable1.revalidate();

    }

    }

输入的二维数组 data2 很好并且经过验证。我添加了代码的最后 5 行,看看它们是否有帮助。我不知道它们是否是强制性的,并且无论如何我都不想更改我用 GUI 构建的 jTable 的图形属性(只是其中的数据)。当我运行程序时,我看到 jTable 仍然是空的。为什么?

4

2 回答 2

4

我建议您使用表格模型,只要数据发生更改,您就可以更改模型。只构建JTable一次实例,而不是在您需要更改数据时。

于 2012-08-25T21:20:15.633 回答
2

正如其他人所说,您不想创建多个JTable实例。像这样创建一个:

DefaultTableModel model = new DefaultTableModel(new Object[0][0], 
    new String[]{"From", "To", "etc."});

JTable table = new JTable(model);

然后,当您需要添加行时,使用

model.addRow(dataForThisRow); // Object

如果要更改单元格:

model.setValueAt(newValue, row, col); // Object, int, int

或者,删除行i

model.removeRow(i); // int

有关详细信息,请参阅DefaultTableModel文档


如果由于某种原因,您每次都必须重新创建表,我相信问题在于您在没有调用的revalidate情况下调用repaint

于 2012-08-25T21:32:34.963 回答