显示可滚动的 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 会自动重新绘制。
我在 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 会自动重新绘制。