【问题标题】:Java swing jTable not being updatedJava swing jTable 未更新
【发布时间】:2012-08-25 21:14:48
【问题描述】:

我使用 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 仍然是空的。 为什么?

【问题讨论】:

  • 如果您使用 Netbeans 表单编辑器构建 GUI,为什么还要添加另一个 JTable?
  • 您正在创建一个新的JTableJScrollPane,但不会替换旧的。你应该只需要一个——改变表数据应该通过表的模型来完成。
  • 已考虑,现在正在工作。谢谢。
  • "jTable .. 搜索选项" 提示:1) JTable 使用正确的大写字母 2) 搜索功能使用TableRowSorter

标签: java swing user-interface jtable


【解决方案1】:

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

【讨论】:

  • 好的,谢谢,我尝试使用原始表的模型并且它正在工作。再次感谢。
【解决方案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

有关详细信息,请参阅the DefaultTableModel documentation


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多