Как заставить JTable заполнить все доступное пространство?

Я хочу создать панель со столом, которая заполняет все доступное пространство.

Я делаю это, используя следующий код:

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);
    }
}

Но это не работает, потому что когда я изменяю размер фрейма, таблица заполняет только часть доступного пространства (см. скриншоты ниже).

Как я могу исправить (заставить таблицу заполнить все доступное пространство)?

Скриншот 1

Скриншот 2


person Mentiflectax    schedule 19.10.2013    source источник
comment
Ваш код не компилируется, конструктор должен соответствовать имени класса. Помогите тем, кто ответит, опубликовав SSCCE   -  person Reimeus    schedule 19.10.2013


Ответы (2)


Используйте менеджер компоновки, который позволяет JTable занимать всю доступную площадь, а не FlowLayout по умолчанию, используемый JPanel, который использует только предпочтительные размеры своих компонентов.

JPanel companiesPanel = new JPanel(new GridLayout());
person Reimeus    schedule 19.10.2013

Есть две проблемы:

1) сначала вам нужно использовать соответствующий менеджер компоновки, чтобы убедиться, что область прокрутки может изменять размер, чтобы заполнить доступную область. Обычно люди добавляют панель прокрутки в ЦЕНТР BorderLayout.

2) вам нужно, чтобы таблица заполнила доступное пространство в области просмотра панели прокрутки. Для этого вы используете:

table.setFillsViewportHeight(true);
person camickr    schedule 19.10.2013