Что такого особенного в CardLayout по сравнению с ручным добавлением/удалением панелей JPanel?

В StackOverflow много раз было, когда пользователь задавал подобный вопрос...

У меня есть основная JPanel, которая содержит дочерний элемент JPanel. Когда пользователь нажимает на , дочерняя панель JPanelдолжна измениться на другую панель JPanel. Как я могу добиться этого.

Чаще всего пользователь пытался реализовать эту проблему, но не мог заставить ее работать.

Всякий раз, когда я отвечаю на этот вопрос, я говорю им сделать что-то вроде этого (просто говоря)...

JPanel myFrame = new JPanel();
myFrame.remove(oldPanel);
myFrame.add(newPanel);

Я считаю это вполне законным ответом, и лично я без проблем использовал его во многих своих Java-проектах. Тем не менее, я всегда получаю отрицательные голоса за свой ответ, и все просто говорят: «Используйте CardLayout ».

Итак, мой вопрос: почему все так увлечены CardLayout, что мой ответ заслуживает отрицательных голосов? Почему я должен использовать CardLayout, а не добавлять/удалять панели с помощью моего кода выше?

В качестве дополнительного вопроса, вы по-прежнему предлагаете CardLayoutдля интерфейсов с динамическими панелями JPanel. Например, большинство моих программ реализуют пользовательский фреймворк плагинов, в котором может быть много сотен JPanel, но я загружаю и отображаю панели только тогда, когда они действительно необходимы. При нормальном использовании программы большинство панелей никогда не загружались бы и не требовались. Будет ли мой подход к написанию кода лучшим решением для такого типа сценария, поскольку я понимаю, что CardLayoutпотребует от меня фактического создания всех JPanel, хотя большинство из них никогда не будет использоваться?

14
задан wattostudios 22 May 2012 в 01:06
поделиться