Лучший способ создать подкласс JPanel в Swing - PullRequest
1 голос
/ 06 марта 2009

В настоящее время я пытаюсь создать расширяющую панель в Swing (похожую на Expander элемент управления WPF), и я хотел бы сохранить обычные методы для управления ею (например, setLayout, add и т. Д. .). Только они должны быть направлены на встроенную панель (отображаемую или скрытую).

Как можно это сделать? Переопределение каждого метода JComponent и перенаправление его на встроенный JPanel было бы громоздким, но это единственный способ, который я вижу.

Или лучше сделать встроенную панель видимой снаружи и заставить пользователей использовать что-то вроде ExpanderPanel.getInnerPanel(). Но тогда это не замена для JPanel, что, я думаю, было бы неплохо иметь.

Ответы [ 3 ]

2 голосов
/ 06 марта 2009

Взгляните на JXTaskPane из Swingx проекта. Он уже делает то, что вам нужно.

1 голос
/ 06 марта 2009

В версии 1.5 (ish) Swing перенаправил несколько методов на панель содержимого в JFrame, JApplet и т. Д. Несмотря на то, что для тех, кто только начинает работать, были некоторые преимущества юзабилити, на самом деле проблема не устраняется. Таким образом, каждый должен иметь дело с очень странным поведением API. Поэтому я советую избегать такого подхода.

0 голосов
/ 06 марта 2009

Если у вас есть виджет «Контейнер», содержащий панель, которую вы хотите показать и скрыть, почему бы не расположить внутреннюю панель так, как вы хотите, а затем добавить ее на панель «Контейнер», а затем использовать статические методы для контейнера, чтобы сказать «1001»

JPanel p = новый JPanel (); // сделать что-нибудь с JPanel ...

ContainerWidget.setContent (р);

ContainerWidget.expandPanel (р, правда);

Хотелось бы кому-нибудь эту работу?

...