2010-03-31 13 views
5

È possibile utilizzare più di 1 gestore di layout in Java. In questo momento sto usando un gridLayout per implementare una scacchiera ma al di sotto di questo vorrei mettere qualche altra roba ma non in un gridLayout. Forse un FlowLayout o qualche altro layout. Come potrei fare questo? Grazie!Gestori di layout multipli in Java

risposta

6

C'è modo di utilizzare più di 1 layout gestore in Java.

Assolutamente. In effetti, usare più gestori di layout è la norma.

Come potrei fare?

Qualsiasi Container sottoclasse può avere un LayoutManager e contengono elementi figlio. E ciascuno di questi elementi figlio può essere esso stesso un Container con bambini. Il contenitore più comunemente utilizzato sotto i frame di livello superiore è JPanel.

Per esempio, probabilmente si dovrebbe utilizzare un BorderLayout per il telaio, mettere un JPanel con la griglia nella sua posizione centrale (perché questo è quello che ottiene tutto lo spazio rimanente disponibile quando le altre posizioni sono state date le loro dimensioni preferite) e un altro JPanel con "altre cose" nella posizione SUD.

Maggiori dettagli possono essere trovati nel Swing tutorial on layout managers.

7

Sì, tutto ciò che serve è quello di pianificare la vostra su tutto UI layout (ie; Finestra, quadro master ecc)

Per esempio, è necessario mettere qualcosa sotto la scacchiera, che normalmente andare con un BorderLayout a il livello base.

Supponiamo quindi di avere un JPanel chiamato masterPanel, che contiene tutti i componenti della mia app di scacchi. Quindi, il codice sarebbe:

JPanel masterPanel = new JPanel(new BorderLayout()); 
JPanel chessBoardPanel = createChessboardPanel(); //assuming this method will return a 
//JPanel with chess board using GridLayout 
JPanel infoPanel = new JPanel(); //this is the panel that would contain info elements, that //may go below my chess board. 
//Now add everything to master panel. 
masterPanel.add(chessBoardPanel, BorderLayout.CENTER); 
masterPanel.add(infoPanel, BorderLayout.PAGE_END); 
//add masterPanel to your window (if required) 
this.getContentPane().add(masterPanel);