我在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);
}
答案 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( .... );
桌子会自动重新粉刷自己。