2009-03-06 2 views
1

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

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

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

ответ

1

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

2

Посмотрите на JXTaskPane от Swingx проекта. Он уже делает то, что вам нужно.

+0

Требования здесь заставляют меня изобретать колесо, поскольку код должен работать на простой Java без каких-либо зависимостей JNI или библиотеки. – Joey

0

Если у вас есть контейнер виджет, который держит панель, которую Вы хотите, чтобы показать и скрыть, почему не макет вашей внутренней панели, как вы, а затем добавить его к панели Container, а затем использовать статические методы против контейнера сказать

JPanel p = new JPanel(); // что-то делать с JPanel ...

ContainerWidget.setContent (p);

ContainerWidget.expandPanel (p, true);

Как-то вроде этой работы?