【问题标题】:How can I change jtable height at runtime如何在运行时更改 jtable 高度
【发布时间】:2010-05-14 13:44:43
【问题描述】:

我有一个 JFrame,其中多个相似宽度的 JPanel 彼此对齐。我使用其中一个 JPanel 来显示一个 JTable,它是该批次的最后一个 JPanel。这个 JPanel 有一个 JScrollpane 作为子组件。这是我尝试动态添加表格的地方。此 JScrollpane 的初始高度设置为 40。

我使用 Netbeans 6.8 设计了上述模板

现在我正在尝试将表格添加到 JPanel。当按下下面的按钮时,将调用代码 sn-p。包含此代码的类扩展了 javax.swing.JFrame 类。

我希望下面的代码会根据行数调整表格高度并显示表格。

SearchTable = new JTable(RowData, DisplayNames) {

        @Override
        public boolean isCellEditable(int rowIndex, int vColIndex) {
            return false;
        }
    };

    // if row count is less than 10 then display all the rows without a scroll bar
    if (SearchTable.getRowCount() < 10) {
        pnl_tblpanel.setPreferredSize(new Dimension(625, SearchTable.getRowHeight() * (SearchTable.getRowCount() + 4)));
        scr_tblholder.setPreferredSize(new Dimension(625, SearchTable.getRowHeight() * (SearchTable.getRowCount() + 4)));
    } else {// if row count is more than 10 display first 10 rows and add a scroll bar
        pnl_tblpanel.setPreferredSize(new Dimension(625, SearchTable.getRowHeight() * (10 + 2)));
        scr_tblholder.setAutoscrolls(true);
    }


    //pnl_tblpanel.add(scr_tblholder);
    scr_tblholder.setViewportView(SearchTable);
    //pnl_tblpanel.repaint();
    pnl_tblpanel.validate();

    this.validate();
    //this.repaint();
    pnl_tblpanel.setVisible(true);
    this.pack();

表格显示,但表格高度不会根据行数改变。它保持其默认值。我一直在尝试验证和重绘的许多组合,但没有任何效果。 (更绝望)

任何人都可以对此有所了解吗 谢谢

【问题讨论】:

  • 您的组件在哪种布局管理器中?仅仅因为您设置了首选大小并不意味着布局管理器需要遵守它。

标签: java jtable jframe jpanel jscrollpane


【解决方案1】:

为什么你创建一个面板只是为了容纳一个滚动面板。将滚动窗格直接添加到主面板。将滚动窗格的首选大小设置为您想要的大小。然后使用

mainPanel.revalidate();

或者您可能需要使用 frame.pack() 来重置搜索对话框的大小。

无论如何,假设您在主面板上使用正确的布局管理器,一切都应该正常。

【讨论】:

  • 我尝试了您的指示,但它不起作用。我正在使用 netbeans 6.8,它使用 javax.swing.GroupLayout,这是 netbeans 中的默认布局有什么建议吗?谢谢
  • 我对 GroupLayout 一无所知。它使用了如此多的约束,这使得使用起来很混乱。如果您将组件动态添加到 GroupLayout,您有责任确保正确设置所有约束。我总是自己编写布局代码,所以我了解它是如何工作的,并且我知道如果需要我可以轻松地动态更改它。不知道它是否会起作用,但我建议您“不要”动态添加表格,而是在设计时添加它。然后你可以尝试只使用 table.setModel(...) 来更新表格。
【解决方案2】:
猜你喜欢
  • 2012-07-26
  • 2011-01-21
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多