如何使JTable填满整个可用空间?

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)

但它不起作用,因为当我调整框架大小时,表格只填充部分可用空间(请参见下面的屏幕截图).

我该如何修复(使表格填满整个可用空间)?

截图1

截图2

Rei*_*eus 9

使用布局管理器,该布局管理器允许JTable占用可用的整个区域,而不是FlowLayout使用JPanel仅使用其组件首选大小的默认值

JPanel companiesPanel = new JPanel(new GridLayout());
Run Code Online (Sandbox Code Playgroud)


cam*_*ckr 6

有两个问题:

1)首先,您需要使用适当的布局管理器,以确保滚动窗格可以调整大小以填充可用区域.通常人们会将scrollpane添加到BorderLayout的CENTER中.

2)您需要让表填充滚动窗格的视口中的可用空间.为此,您使用:

table.setFillsViewportHeight(true);
Run Code Online (Sandbox Code Playgroud)