2011-01-29 8 views
6

Learing GridBagLayout, El problema aquí es que la etiqueta del nombre y la combox no aparecen en la parte superior del panel, pero he establecido su ancla en NORTH. Por qué ?java GridBagLayout anchor

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 

public class Test2 {  
    public Test2() { 
     JFrame frame = new JFrame(); 
     frame.setTitle("test"); 
     frame.getContentPane().setLayout(new GridLayout(1,2)); 
     frame.setSize(800, 600); 

     JPanel panel1 = new JPanel(); 
     panel1.setLayout(new GridBagLayout()); 

     JLabel label = new JLabel("name"); 
     GridBagConstraints gridBagConstraints = new GridBagConstraints(); 
     gridBagConstraints.anchor = GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 0.0; 
     gridBagConstraints.weighty = 0.0; 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 0; 
     panel1.add(label, gridBagConstraints); 

     String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
     JComboBox petList = new JComboBox(petStrings); 
     gridBagConstraints = new GridBagConstraints(); 
     gridBagConstraints.anchor = GridBagConstraints.NORTH; 
     gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.weighty = 0.0; 
     gridBagConstraints.gridx = 1; 
     gridBagConstraints.gridy = 0; 
     panel1.add(petList, gridBagConstraints);  

     frame.getContentPane().add(panel1); 
     frame.getContentPane().add(new JPanel());  

     frame.setVisible(true); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
    } 

    public static void main(String[] args) { 
     new Test2(); 
    } 
} 

Respuesta

16

usted tiene que cambiar

gridBagConstraints.weighty = 0.0; 

a

gridBagConstraints.weighty = 1.0; 

de lo contrario el área reservada para el componente se adelgazó con el tamaño del componente, y no importa en que dirección que "ancla" el componente.

El resultado después de cambiar el weighty es la siguiente:

enter image description here

+0

sí, tiene usted razón. ¿Quiere decir que cuando el anclaje se establece en NORTE, entonces el peso tiene que ser 1.0? – user595234

+0

Bueno, si desea que el componente tenga algún "área" (más grande que el componente en sí) para colocar, necesita un peso que no sea cero. (Es decir, el peso 0.1 también funcionaría en este caso particular). – aioobe

+0

Siempre confundo el doble valor, ¿cuál es la diferencia entre 1.0 y 0.5? – user595234

Cuestiones relacionadas