2013-06-14 12 views
7

Quando provo ad allineare il mio componente, esso va sul lato sinistro o sul lato destro.Come allineare il centro dei componenti in JPanel usando GridBagLayout?

Quindi voglio solo che la soluzione risolva questo problema e dimmi anche come impostare la dimensione del pannello come 400 x 350 pixel.

enter image description here

Ecco il mio codice .... titleLabel e ResultLabel dovrebbero essere allineati nel centro

public TimeGui() { 

    layout = new GridBagLayout(); 
    setSize(400, 350); //**Its not working** 
    setBackground(Color.LIGHT_GRAY); 
    setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
    setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion")); 

    setLayout(layout); 
    layoutConstraints = new GridBagConstraints();  
    textField1 = new JTextField(10); 
    textField2 = new JTextField(10); 

    String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"}; 


    comboBox1 = new JComboBox<>(names1); 
    comboBox2 = new JComboBox<>(names1); 

    titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER); 
    resultLabel = new JLabel("Result Label"); 
    equalLabel = new JLabel("="); 

    convertButton = new JButton("Convert"); 


    layoutConstraints.fill = GridBagConstraints.HORIZONTAL; 
    Insets inset = new Insets(10, 10, 10, 10); 
    layoutConstraints.anchor = GridBagConstraints.CENTER; 

    addComponent(titleLabel, 0, 0, 2, 2, inset); // I tried (0,1,2,2) 



    addComponent(comboBox1, 3, 0, 2, 3, inset); 

    addComponent(comboBox2, 3, 2, 2, 3, inset); 

    addComponent(textField1, 6, 0, 1, 2, inset); 

    addComponent(equalLabel, 6, 1, 1, 2, inset); 

    addComponent(textField2, 6, 2, 1, 2, inset); 

    addComponent(resultLabel, 8, 1, 2, 1, inset); 

    addComponent(convertButton, 10, 0, 2, 2, inset); 

} 

private void addComponent(Component component, int row, 
     int column, int width, int height, Insets inset1) { 
    layoutConstraints.gridx = column; 
    layoutConstraints.gridy = row; 
    layoutConstraints.gridwidth = width; 
    layoutConstraints.gridheight = height; 
    layoutConstraints.insets = inset1; 
    layout.setConstraints(component, layoutConstraints); 
    add(component); 
} 
} 
+0

In assenza dell'immagine, sarebbe saggio, se almeno si può fornire uno [___SSCCE___] (http://sscce.org/), in modo che si possa eseguire senza alcuna aggiunta. Carica la tua immagine su qualsiasi sito, come [** imgur **] (http://imgur.com/), [** dropbox **] (https://www.dropbox.com/home) o [* * 4shared **] (http://www.4shared.com/). Chiunque abbia privilegi più elevati lo aggiungerà alla tua domanda –

+0

ok dimmi solo come impostare la dimensione del pannello. – user1874936

risposta

4

Il problema è con i tuoi gridwidth e le vostre proprietà fill ...

enter image description hereenter image description here

Fondamentalmente tutto quello che ho cambiato è stato ...

addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2) 
addComponent(comboBox1, 3, 0, 1, 3, inset); 
addComponent(comboBox2, 3, 2, 1, 3, inset); 
addComponent(textField1, 6, 0, 1, 2, inset); 
addComponent(equalLabel, 6, 1, 1, 2, inset); 
addComponent(textField2, 6, 2, 1, 2, inset); 
layoutConstraints.fill = GridBagConstraints.NONE; 
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset); 
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset); 

Si potrebbe giocare con alcuni degli altri.

Per quanto riguarda la definizione della dimensione effettiva del pannello, il meglio che puoi fare è quello di sovrascrivere il metodo del TimeGuigetPreferredSize ...

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(400, 350); 
} 

Quale sarà "suggerire" al contenitore principale che misura vi vorrebbe essere disposto a Ricorda, questo è un valore facoltativo e i gestori di layout sono ben lì dentro per poterlo ignorare.

+0

Great ... Grazie mille – user1874936

+0

Come aumentare la dimensione del componente. In modo che risulti più chiaro – user1874936

+0

Dipende dal gestore di layout che si sta utilizzando per visualizzarlo. Inizia sovrascrivendo 'getPreferredSize' come menzionato nella parte inferiore della mia risposta – MadProgrammer

Problemi correlati