jtabbedpane вкладки разных размеров - PullRequest
0 голосов
/ 21 апреля 2010

Я создаю функцию поиска для базы данных, которая использует jtabbedpane с одной вкладкой для быстрого поиска и одной для расширенного поиска. расширенный поиск имеет еще несколько полей, поэтому он должен быть больше, но я не хочу, чтобы все окно всегда имело максимальный размер по эстетическим соображениям. я добавил слушателя изменений на панель и попытался изменить размер панели в зависимости от того, какая вкладка у него есть, и код выполняется при нажатии на вкладку, но ничего не делает. Я попытался использовать tabbedSearchPane.setSize (), затем tabbedSearchPane.validate (), а также изменить размеры компонентов вокруг него с помощью setSize + validate, и, похоже, ничего не делает. Мне действительно нужно знать, как на самом деле изменить размер jtabbedpane.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Как описано в Предпочтительный размер во вкладках , и, как вы заметили, JTabbedPane очень старается сделать для размещения самой большой панели. Чтобы переключиться с большего на меньшее, вы должны заменить большую панель на временную, имеющую тот же размер, что и меньшая, и invalidate() панель с вкладками; обратное требуется, чтобы пойти другим путем. Это борьба. В качестве альтернативы рассмотрите возможность использования CardLayout, упомянутое здесь . Поскольку вы захотите изменить размер вмещающего контейнера, обратите внимание на то, как этот связанный пример использует pack() соответственно.

0 голосов
/ 24 февраля 2018

Я решил эту проблему без проблем. (Моя панель с вкладками наследуется в другой панели, если она играет какую-либо роль)

tabbedPane.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                switch (tabbedPane.getSelectedIndex()) {
                case 0:
                    tabbedPane.setPreferredSize(new Dimension(1, 230));
                    break;
                case 1:
                    tabbedPane.setPreferredSize(new Dimension(1, 330));
                    break;
                case 2:
                    tabbedPane.setPreferredSize(new Dimension(1, 430));
                    break;
                }
            }
        });

и, конечно, когда я создаю свой jtabbedpane:

tabbedPane.setPreferredSize(new Dimension(1, 230));

Я перекрашиваю-заново проверяю обе jtabbed / parentpanel обе после этого, но по другим причинам ... Кажется, это работает, даже не вызывая repain / revalidate ни на одной из панелей.

Предварительный просмотр (красная рамка = другая панель)

enter image description here

...