Melhor maneira de subclassificação um JPanel no Swing
Pergunta
Atualmente, estou tentando construir um painel de expansão no Swing (semelhante controle Expander
do WPF) e eu gostaria de manter os métodos usuais para manipulá-lo (i. E. setLayout
, add
, etc.). Só que eles devem ser encaminhados para um painel incorporado (o que está sendo mostrado ou oculto).
Como alguém faria isso? Substituindo cada método de JComponent
e re-encaminhamento que a um JPanel
incorporado seria complicado, mas essa é a única maneira que eu vejo.
Ou devo sim fazer o painel incorporado visível para os usuários externos e de força para usar algo como ExpanderPanel.getInnerPanel()
vez. Mas então não é substituto para JPanel
que eu acho que seria bom ter.
Solução
Em 1,5 (ish) Balanço encaminhado alguns métodos para o painel de conteúdo em JFrame
, JApplet
, etc. Enquanto parecia haver alguns benefícios de usabilidade para quem está começando, ele realmente não corrigir o problema. Então, todo mundo tem que lidar com uma API muito estranhamente comportando. Portanto, meu conselho é evitar esta abordagem.
Outras dicas
Dê uma olhada no JXTaskPane de SwingX projeto. Ele já faz o que você precisa.
Se você tem um widget recipiente que contém um painel que pretende mostrar e esconder, por que não layout do seu painel interno como quiser, em seguida, adicioná-lo ao painel do recipiente, em seguida, usar métodos estáticos contra o recipiente para dizer
JPanel p = new JPanel (); // fazer algo com o JPanel ...
ContainerWidget.setContent (p);
ContainerWidget.expandPanel (p, true);
Será que somethign como este trabalho?