Il modo migliore per sottoclassare un JPanel in Swing
Domanda
Attualmente sto cercando di creare un pannello espandibile in Swing (simile al controllo Expander
del WPF) e vorrei mantenere i soliti metodi per manipolarlo (ad esempio setLayout
, aggiungi
, ecc.). Solo loro dovrebbero essere indirizzati a un pannello incorporato (quello mostrato o nascosto).
Come si farebbe? Sostituire ogni metodo di JComponent
e reindirizzarlo a un JPanel
incorporato sarebbe ingombrante, ma è l'unico modo che vedo.
O dovrei piuttosto rendere visibile il pannello incorporato all'esterno e forzare gli utenti a usare qualcosa come ExpanderPanel.getInnerPanel ()
. Ma poi non è un sostituto drop-in per JPanel
che penso sarebbe bello avere.
Soluzione
In 1.5 (ish) Swing ha indirizzato alcuni metodi al riquadro del contenuto in JFrame
, JApplet
, ecc. Mentre sembravano esserci alcuni vantaggi di usabilità per coloro che hanno appena iniziato , in realtà non risolve il problema. Quindi tutti hanno a che fare con un'API che si comporta in modo molto strano. Quindi il mio consiglio è di evitare questo approccio.
Altri suggerimenti
Dai un'occhiata al JXTaskPane dal progetto Swingx . Fa già quello che ti serve.
Se hai un widget Contenitore che contiene un pannello che vuoi mostrare e nascondere, perché non layout il pannello interno come preferisci, quindi aggiungilo al pannello Contenitore, quindi usa metodi statici contro il Contenitore per dire
JPanel p = new JPanel (); // fai qualcosa con JPanel ...
ContainerWidget.setContent (p);
ContainerWidget.expandPanel (p, true);
Qualcosa del genere piacerebbe a questo lavoro?