CardLayout - чтобы он занимал как можно меньше места - PullRequest
4 голосов
/ 09 ноября 2010

Все,

У меня есть представление типа формы, которое я создаю в Java.Основываясь на содержимом комбинированного списка, мне нужно переключить некоторые аспекты формы.Для этого я использую карту-раскладку, и она отлично работает.

Проблема в том, что карты-макеты используют максимум всех предпочтительных размеров добавляемых к ним компонентов, чтобы определить их собственный предпочтительный размер.Это означает, что когда я выбрал опцию, в которой меньше полей, из-за предпочтительного размера карты в компоненте переключателя остается пустое пространство.

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

combo.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            Dimension preferredSize = null;
            switch (combo.getSelectedIndex()) {
                case 0:
                    preferredSize = panel0.getPreferredSize();
                    break;
                case 1:
                    preferredSize = panel1.getPreferredSize();
                    break;
                case 2:
                    preferredSize = panel2.getPreferredSize();
                    break;
                default:
                    assert false;
            }
            patternOptions.setPreferredSize(preferredSize);
            c.show(patternOptions, TYPE[combo.getSelectedIndex()]);
        }
    });

В двух словах, я хотел бы, чтобы пользовательский интерфейс динамически увеличивался при выборе варианта, который требует больше места, и сокращался, когда ему требовалось меньше места, как в пользовательском интерфейсе смарт-списка iTunes:

alt text alt text

(Я понимаю, что это немного другая проблема, но она иллюстрирует то, что я хочу - эта панель, содержащая поля ограничений, растет в зависимости от количества строк. Iнужно, чтобы мой макет увеличивался в зависимости от количества опций, основанных на выборе в выпадающем списке)

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Вы можете создать подкласс CardLayout и переопределить метод preferredLayoutSize, чтобы он учитывал только текущую карту.

Чтобы убедиться, что кадр увеличивается и уменьшается, вам может потребоваться вызвать pack после установки размерасодержимое.Не уверен, что это сработает во всех случаях (может не сжиматься), но стоит попробовать.

1 голос
/ 09 ноября 2010

Похоже, вы должны использовать JDialog для каждой формы.

Или не стоит использовать CardLayout и вручную удалить / заменить каждую панель, а затем упаковать () диалоговое окно.

...