显示可滚动的JTable

时间:2019-05-25 23:27:06

标签: java swing jtable awt

我在contentPane中显示可滚动JTable时遇到问题,该表应该在标签下方,但是什么也没有显示。但是,当我删除scrollPane时,将显示该表。Without scrollPane With 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); 

    }

1 个答案:

答案 0 :(得分:1)

  

但是,当我删除scrollPane时,将显示该表。

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

根据上面的代码,由于您看到表格,因此您似乎正在使用空布局。

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

请勿使用空布局!

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

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

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

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

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

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

table.setModel( .... );

桌子会自动重新粉刷自己。