Domanda

Devo creare un modulo piuttosto grande con molti controlli. I controlli sono divisi in controlli / impostazioni di base e estesi . L'utente può decidere se desidera visualizzare solo i controlli di base o sia di base che estesi.

Ho lasciato cadere tutti i controlli estesi sul proprio JPanel in modo da poter facilmente passare da una vista all'altra mostrando o nascondendo questo pannello.

Attualmente sto usando GroupLayout e quello che succede è che i controlli su diversi pannelli non sono allineati:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

Purtroppo ho trovato il modo di " sincronizzare " i layout dei due pannelli (tranne che per l'uso di AbsoluteLayout e coordinate di controllo fisse)

  • C'è un modo per raggiungere questo obiettivo?
  • Il mio intero design è difettoso?

MODIFICA: Se è possibile, vorrei mantenere il gestore GroupLayout.

È stato utile?

Soluzione

Per quanto ne so, nessun LayoutManager di Swing (da JRE o open source) può estendersi su più pannelli.

Attualmente sto lavorando a tale funzione (che ho chiamato " sincronizzazione layout ") per il mio DesignGridLayout , ma non è qualcosa di facile da implementare (ho iniziato circa 2 settimane fa e ancora non vedo esattamente se e quando arriverò a qualcosa di interessante, ma ho ancora alta speranza per questo ;-))

Un'opzione che potresti controllare sarebbe quella di aggiungere tutti i componenti allo stesso pannello (con un solo GroupLayout quindi) e nasconderli / mostrarli in base alla selezione dell'utente. Eventualmente, GroupLayout adatterà le dimensioni alla situazione (dopo aver chiamato pack ()).

Se GroupLayout si comporta bene, sarebbe solo questione di chiamare pack () ogni volta che l'utente cambia la sua selezione per mostrare / nascondere i campi estesi.

Altrimenti dovresti impostare manualmente le dimensioni del tuo pannello ogni volta che l'utente cambia la sua selezione.

Altri suggerimenti

Probabilmente il modo più semplice (buono) per farlo è quello di aggiungere tutti i componenti al pannello principale. Impostare i pannelli secondari su non opaco e aggiungere anche il pannello principale. Il pannello principale deve essere disattivato per il disegno ottimizzato.

Un'altra tecnica è quella di aggiungere un componente spaziatore. Al pannello inferiore aggiungi un componente nella stessa colonna delle etichette che prende dinamicamente il componente larghezza dei suoi vari metodi di dimensione dalle etichette superiori. Fai lo stesso inverso al pannello superiore.

Penso che non ci sia modo di farlo con i gestori di layout standard. Probabilmente dovrai scrivere il tuo gestore di layout, ma non dovrebbe essere troppo difficile se esegui una sottoclasse di GroupLayout.

Potresti usare GridLayout invece di GroupLayout che ti darà una spaziatura uniforme tra le colonne

Se vuoi tenerli in pannelli separati con layout separati:

Scorri su tutte le etichette che aggiungi e trova la larghezza massima preferita di ciascuna. Scorrere una seconda volta e impostare la dimensione preferita sull'altezza preferita di ciascuna etichetta, ma sulla larghezza massima.

Questa è la spiegazione del GridLayout . Questo imposterà ogni componente sulla dimensione, te lo aspetti. Con l'oggetto GridData puoi specificare come ordinare i componenti.

Esempi

 alt text
(fonte: sun.com )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top