2015-10-04 30 views
5

Ho creato un semplice GridBagLayout che aggiunge pulsanti nelle celle (0,0), (1,0) e (0,1).GridBagLayout richiede pannelli segnaposto per celle vuote?

JPanel panelMain = new JPanel(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 
    c.gridx = 0; 
    c.gridy = 0; 
    panelMain.add(new JButton("0,0"),c); 

    c.gridx = 1; 
    c.gridy = 0; 
    panelMain.add(new JButton("1,0"),c); 

    c.gridx = 0; 
    c.gridy = 1; 
    panelMain.add(new JButton("0,1"),c); 

sono stato felice di vedere la risultante UI:

Desired result

voglio aggiungere un JButton in una cella che non è collegato alle celle esistenti. Voglio che sia separato da uno spazio vuoto. Quando provo questo, il nuovo JButton è accoppiato accanto agli altri. Ecco l'aggiunta:

JPanel panelMain = new JPanel(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 
    c.gridx = 0; 
    c.gridy = 0; 
    panelMain.add(new JButton("0,0"),c); 

    c.gridx = 1; 
    c.gridy = 0; 
    panelMain.add(new JButton("1,0"),c); 

    c.gridx = 0; 
    c.gridy = 1; 
    panelMain.add(new JButton("0,1"),c); 

    c.gridx = 3; 
    c.gridy = 0; 
    panelMain.add(new JButton("3,0"),c); 

L'output:

Undesired result

Il JButton("3,0") è la visualizzazione in corrispondenza della cella (2,0). Devo utilizzare un vuoto come segnaposto nella cella (2,0)? Ancora più importante, perché sta succedendo questo?

risposta

3

Il layout non sa quale deve essere la larghezza da lasciare su 2,0 a meno che non sia inserito un componente nello gridx = 2. Nel momento in cui completi l'interfaccia utente, se qualche componente viene inserito, dovrebbe apparire corretto. Per es .:

enter image description here

In altri casi è possibile aggiungere vuota JPanel con la corrispondenza del colore di sfondo al colore del contenitore di fondo.

2

Devo utilizzare un JPanel vuoto come segnaposto nella cella (2,0)?

È possibile utilizzare un vincolo della griglia di "inserimenti" per liberare spazio tra i componenti. Leggi il tutorial Swing su How to Use GridBagLayout per ulteriori informazioni sul vincolo di inserimento.

Oppure, se si desidera disporre di un segnaposto, è possibile utilizzare uno Box.createHorizontalStrut(...) per specificare facilmente la larghezza.

Ancora più importante, perché sta succedendo?

Le celle non hanno una dimensione a meno che non ci sia un componente nella cella. Ogni cella è indipendente l'una dall'altra, quindi quale dimensione ti aspetteresti dalla cella (2,0)?

Problemi correlati