java swing jtable未更新

smtd7mpg  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(397)

我使用netbeansgui构建了一个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();

    }

    }

输入的二维数组数据2是良好的和有效的。我添加了最后5行代码,看看它们是否有帮助。我不知道它们是否是必需的,在任何情况下,我都不想更改用gui构建的jtable的图形属性(只是其中的数据)。当我运行程序时,我看到jtable仍然是空的。为什么?

vojdkbi0

vojdkbi01#

我建议您使用一个表模型,每当数据改变时,您就改变模型。构建 JTable 只执行一次示例,而不是在需要更改数据时执行。

q43xntqr

q43xntqr2#

正如其他人所说,您不想创建多个 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 .

相关问题