2010-11-22 10 views
6

Ho tre JPanels dipinti su un JFrame. Attualmente sono tutti impostati per utilizzare il FlowLayout predefinito. Vorrei che questi fossero uno sopra l'altro in una singola colonna.Java Swing: FlowLayout JPanel sono seduti uno accanto all'altro?

Tuttavia, sto trovando che questi stanno galleggiando uno accanto all'altro sulla stessa linea, purché i componenti al loro interno.

La larghezza naturale di un JPanel FlowLayout è la somma dei suoi contenuti? In tal caso, c'è un modo per forzare la larghezza della regione ad essere la larghezza del JFame?

È interessante notare che, se i pannelli "in alto" e "in basso" hanno un contenuto che copre l'intera larghezza del JFame e il pannello "centrale" è vuoto, il pannello "centrale" crea un lo spazio tra i due, molto simile al vecchio "

di html.

Grazie,

Ben

risposta

1

È possibile utilizzare GridLayout per creare YxZ griglia in un componente. per costruire layout più precisamente è possibile utilizzare GridBagLayout che fornisce il pieno controllo di po dimensionamento e dimensionamento per componenti annidati.

0

Io vado sempre con NetBeans. Dal momento che, posso rendere Free Design senza alcun problema nel posizionare i componenti su JPanel o JFrame :) Potresti prenderlo in considerazione.

2

Se si desidera creare un layout verticale, è consigliabile esaminare BoxLayout per il contenitore che lo contiene. Questo può essere impostato sui componenti del layout lungo l'asse y.

4

Come ha affermato Jim, BoxLayout è la scelta corretta se è necessario allineare linearmente i componenti.

Ecco un esempio:

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** 
* 
* @author nicholasdunn 
*/ 
public class BoxLayoutExample extends JPanel { 

    public BoxLayoutExample() { 
     JPanel topPanel = new JPanel(); 
     JPanel middlePanel = new JPanel(); 
     JPanel bottomPanel = new JPanel(); 

     topPanel.setBorder(BorderFactory.createEtchedBorder()); 
     middlePanel.setBorder(BorderFactory.createEtchedBorder()); 
     bottomPanel.setBorder(BorderFactory.createEtchedBorder()); 

     topPanel.add(new JLabel("Top")); 
     middlePanel.add(new JLabel("Middle")); 
     bottomPanel.add(new JLabel("Bottom")); 

     BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS); 
     setLayout(boxLayout); 
     add(topPanel); 
     add(middlePanel); 
     add(bottomPanel); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new BoxLayoutExample(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

alt text

Si farebbe bene a leggere davvero attraverso il introduction to layout managers per capire il set di base di LayoutManagers. Quando arriva il momento di fare layout complessi, si prega di utilizzare MigLayout invece di provare a imparare GridBagLayout - mi ringrazierai.

Problemi correlati