显示可滚动的 JTable

Displaying scrollable JTable

我在 contentPane 中显示可滚动的 JTable 时遇到问题,table 应该在标签下方,但什么也没有显示。但是,当我删除 scrollPane 时,会显示 table。

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); 

    }

However, when I remove the scrollPane, the table is displayed.

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

根据上面的代码,您似乎在使用空布局,因为您看到了 table。

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

不要使用空布局!!!

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

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

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

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

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

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

table.setModel( .... );

table 会自动重新绘制。