it-swarm.it

Ridimensionamento automatico degli elementi di rotazione per adattarli alle dimensioni del contenitore

Ho un contenitore (JPanel) che contiene alcuni elementi interni. Mi chiedevo se fosse possibile forzare gli elementi interni ad adattarsi alle dimensioni del contenitore. Ho bisogno che siano completamente visibili, ovvero ridimensionate per adattarle alle dimensioni del Pannello e non tagliare alcune parti degli elementi interni.

Lo scorrimento non è un'opzione.

È possibile ciò usando un layout o qualcosa del genere?

EDIT: importante chiarimento: Il fatto è che non ho accesso agli elementi interni né alle loro proprietà quindi direi che è necessario un Layoutmanager in grado di ridimensionare gli elementi figlio per adattarli alle sue dimensioni. Ho testato BorderLayout e GridBagLayout ma il risultato è sempre lo stesso, gli elementi interni sono tagliati.

12
Shakur

È esattamente per questo motivo che LayoutManagers esiste. Tutti i LayoutManagers funzionano direttamente per i contenitori semplici, escludendo GridBagLayout che è in grado di gestire direttamente la maggior parte delle GUI complete.

Per la maggior parte della GUI competitiva hai alcune scelte come segue:

  • Cerca un layout 3rd part come MigLayout o qui
  • Usa GridBagLayout
  • Il modo molto semplice è usare nested layout, dove c'è più di un JPanel e ognuno ha child JPanels con lo stesso o diverso LayoutManager
  • Oppure layout personalizzato , dovrebbe essere difficile ..., ma come usare GridBagLayout
12
mKorbel

È possibile impostare il layout JPanelsul layout del bordo, quindi aggiungere il singolo bambino al centro. Se ci sono più bambini, questo approccio diventa meno utile poiché le componenti aggiunte al NORTHname__, SOUTHname__, EASTe WESTrimarranno dimensionate staticamente mentre il centro si ridimensiona per riempire il resto.

In breve, questa non è una soluzione ideale. Tutto il layout di Swing è reso ancora più complesso dal fatto che i diversi componenti si comportano in modi diversi, quindi è davvero necessario fornire ulteriori dettagli dei componenti figlio che si desidera aggiungere al pannello e qualsiasi comportamento che è stato ignorato su quelli componenti.

Il modo migliore è provare un paio di semplici esempi per vedere che tipo di chilometraggio ottieni e se una sottile riprogettazione del nesting dei componenti figlio potrebbe essere d'aiuto.

5
extorn

puoi utilizzare un layout, come GridBagLayout, o BorderLayout a seconda della situazione. Con pesi adeguati è possibile.

0

mi sembra che dovresti solo dare un'occhiata ad un gestore di layout appropriato e usarlo. Ad esempio, guarda BorderLayout: metti il ​​tuo componente nel CENTRO e occuperà tutta l'area. Sta a ciascun gestore di layout concreto decidere quale sarà la dimensione dei componenti. Marchio 

0
Mark Bramnik

Stavo usando un JInternalFrame all'interno di JDesktopPane. Volevo che il frame_interno ridimensionasse automaticamente quando il riquadro del desktop viene ridimensionato, quindi ho dovuto implementare l'evento AncestorResized per il frame interno in cui ho inserito il seguente codice:

 this.setPreferredSize(this.getParent().getPreferredSize());
 this.pack();

e ha funzionato per me :)

0
iltaf khalid