SwingでJPanelをサブクラス化する最良の方法
質問
現在、Swingでエキスパンドパネル(WPFの Expander
コントロールに似ています)を構築しようとしていますが、それを操作するための通常の方法(つまり setLayout
、 add
など)。埋め込みパネル(表示または非表示になっているパネル)にのみルーティングする必要があります。
どのようにそれを行うのでしょうか? JComponent
のすべてのメソッドをオーバーライドし、それを埋め込み JPanel
に再ルーティングするのは面倒ですが、それが私が見る唯一の方法です。
または埋め込みパネルを外部から見えるようにし、代わりに ExpanderPanel.getInnerPanel()
のようなものを使用するようユーザーに強制する必要があります。しかし、それは JPanel
のドロップイン置換ではありません。
解決
1.5(ish)では、Swingは JFrame
、 JApplet
などのコンテンツペインにいくつかのメソッドをルーティングしました。 、実際には問題を解決しません。そのため、誰もが非常に奇妙に振る舞うAPIに対処する必要があります。したがって、このアプローチを避けることをお勧めします。
他のヒント
Swingx プロジェクトの JXTaskPane を見てください。すでに必要なことを行っています。
表示および非表示にするパネルを保持するコンテナウィジェットがある場合、必要に応じて内部パネルをレイアウトし、それをコンテナパネルに追加してから、コンテナに対して静的メソッドを使用して言います
JPanel p =新しいJPanel(); // JPanelで何かをする...
ContainerWidget.setContent(p);
ContainerWidget.expandPanel(p、true);
このように動作しますか?