2009-11-13 8 views
20

Ho creato un numero personalizzato JPanel che visualizza le immagini (chiamiamolo MyPanel), l'ho aggiunto al contenutoPer JFrame.Come ridimensionare automaticamente JFrame in base al contenuto

Desidero ridimensionare automaticamente lo JFrame per adattarlo allo MyPanel quando l'immagine cambia.

Sembra che devo chiamare lo frame.pack() per farlo. Chiamare pack() da MyPanel aumenta l'accoppiamento, quindi non voglio farlo.

Per risolvere il problema ho esteso JFrame (consente di chiamare MyFrame) e reso MyFrame osservatore, e MyPanel osservabile. Ogni volta che l'immagine MyPanel visualizza modifiche, notifica i listener, MyFrame per questa istanza. E quindi MyFrame chiama pack() quando riceve la notifica.

C'è un modo più semplice di ridimensionare JFrame in base al suo contenuto?

risposta

10

La soluzione che hai descritto sembra ragionevole.

In alternativa, ogni volta che MyPanel cambia immagine, può trovarne il frame principale e quindi chiamare pack() su di esso. Se non esiste un tale Frame, allora non fare nulla. Non c'è bisogno di creare classi aggiuntive, ed è un accoppiamento un po 'sciolto come si sta per ottenere. È possibile utilizzare SwingUtilities.getAncestorOfClass() per farlo facilmente.

+1

Sì, il mio approccio era ragionevole. Grazie per l'approvazione :) – nimcap