DP_*_*DP_ 0 java swing jtable layout-manager preferredsize
我想创建一个带有表的面板,它填满了整个可用空间.
我使用以下代码执行此操作:
public class MyFrame extends JFrame {
public EconomyFrame() throws HeadlessException {
super("...");
final JTabbedPane tabbedPane = new JTabbedPane();
add(tabbedPane);
final JPanel companiesPanel = new JPanel();
final CompaniesTableModel companiesModel = new CompaniesTableModel
(ApplicationStateSingleton.INSTANCE.getPersistence().getCompanies());
final JTable companiesTable = new JTable(companiesModel);
ApplicationStateSingleton.INSTANCE.getEventBus().subscribeToPropertyChanges(companiesModel);
companiesPanel.add(new JScrollPane(companiesTable));
tabbedPane.addTab("Companies", companiesPanel);
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为当我调整框架大小时,表格只填充部分可用空间(请参见下面的屏幕截图).
我该如何修复(使表格填满整个可用空间)?


使用布局管理器,该布局管理器允许JTable占用可用的整个区域,而不是FlowLayout使用JPanel仅使用其组件首选大小的默认值
JPanel companiesPanel = new JPanel(new GridLayout());
Run Code Online (Sandbox Code Playgroud)
有两个问题:
1)首先,您需要使用适当的布局管理器,以确保滚动窗格可以调整大小以填充可用区域.通常人们会将scrollpane添加到BorderLayout的CENTER中.
2)您需要让表填充滚动窗格的视口中的可用空间.为此,您使用:
table.setFillsViewportHeight(true);
Run Code Online (Sandbox Code Playgroud)