Come auto ridimensionare JFrame in base al contenuto
-
20-09-2019 - |
Domanda
Ho creato un JPanel
personalizzato che visualizza le immagini (permette di chiamare MyPanel
), ho aggiunto questo per contentPane di JFrame
.
Voglio JFrame
ad essere ridimensionato automaticamente per adattarsi al MyPanel
quando l'immagine cambia.
Sembra che ho bisogno di chiamare frame.pack()
per fare questo. Chiamata pack()
da MyPanel
aumenta di accoppiamento in modo da non voglio farlo.
Per risolvere il problema ho esteso JFrame
(consente di chiamare MyFrame
) e reso osservatore MyFrame
e MyPanel
osservabile. Ogni volta che il MyPanel
immagine è la visualizzazione cambiamenti che notifica gli ascoltatori, MyFrame
per questa istanza. E poi MyFrame
chiama pack()
quando arriva la notifica.
C'è un modo più agevole di ridimensionamento JFrame
in base al suo contenuto?
Soluzione
La soluzione che hai descritto sembra ragionevole.
In alternativa, ogni volta che MyPanel cambia la sua immagine, si può andare a trovare il suo frame principale e quindi chiamare pack () su di esso. Se non esiste un tale cornice, allora non fare nulla. Non c'è bisogno di creare classi addizionali, e il suo come un accoppiamento sciolto, come si sta per arrivare. È possibile utilizzare SwingUtilities.getAncestorOfClass () per farlo facilmente.