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

时间:2013-10-19 14:39:02

标签: 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);
    }
}

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

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

Screenshot 1

Screenshot 2

2 个答案:

答案 0 :(得分:8)

使用布局管理器,JTable占据整个可用区域,而不是FlowLayout使用的默认JPanelJPanel companiesPanel = new JPanel(new GridLayout()); 仅使用其组件首选大小

{{1}}

答案 1 :(得分:6)

有两个问题:

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

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

table.setFillsViewportHeight(true);