【问题标题】:Displaying scrollable JTable显示可滚动的 JTable
【发布时间】:2019-10-12 01:14:33
【问题描述】:

我在我的 contentPane 中显示可滚动 JTable 时遇到问题,该表应位于标签下方,但没有显示任何内容。但是,当我删除 scrollPane 时,会显示表格。

public void populateJTable(int resultCount, String[] closeNames, String[] closeCities) {
        String[] columnTitles = {"Brewery", "City"}; 
        String[][] data = new String[resultCount][columnTitles.length];

        for(int i = 0; i < closeNames.length; i++) {
            String tempBrewery = closeNames[i];
            String tempCity = closeCities[i];
            data[i][0] = tempBrewery;
            data[i][1] = tempCity;
        }

        table = new JTable(data, columnTitles);
        table.setBounds(20, 95, 580, 250);

        JScrollPane scrollPane = new JScrollPane(table);
        table.setFillsViewportHeight(true);
        contentPane.add(scrollPane); 

    }

【问题讨论】:

标签: java swing jtable awt


【解决方案1】:

但是,当我移除 scrollPane 时,表格会显示出来。

table.setBounds(20, 95, 580, 250);

根据上面的代码,因为您看到了表格,所以看起来您使用的是空布局。

但是,当您将表格添加到滚动窗格时,滚动窗格没有大小,因此没有可绘制的内容。

不要使用空布局!!!

Swing 旨在与布局管理器一起使用。了解如何使用它们,代码将更容易编码和更好地工作。

    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    contentPane.add(scrollPane); 

所以现在,当您开始使用布局管理器并将组件添加到可见 GUI 时,您需要 revalidate() 和 repaint()` 更改为调用面板上的布局管理器的面板。所以你需要添加:

contentPane.revalidate();
contentPane.repaint();

但是,更好的解决方案是不要继续创建新的 JTable 和 JScrollPane。相反,您可以在创建框架并将它们添加到框架时创建这些组件。

然后,当您进行搜索时,您只需使用搜索结果创建一个新的 TableModel,然后使用以下命令更新表:

table.setModel( .... );

表格会自动重新绘制。

【讨论】:

  • 谢谢,我确实更改为 FlowLayout 而不是 null。我让表格滚动的另一种方法是 table.setPreferredScrollableViewportSize(new Dimension(550, 300));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多