Pregunta

¿cómo puedo hacer un botón lateral lugar al lado del otro. He utilizado un GridBagLayout para diseñar el problema layout.The es que el lugar botón demasiado lejos el uno del otro. He tratado de elegir el centro como ancla pero esto hace que la superposición botón. Si usara oeste y el este, el botón se coloca demasiado lejos unos de otros.

por ejemplo. SAVE ---------- nuevo patrón en lugar de SAVE NEW_PATTERN.

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
¿Fue útil?

Solución

Gracias AKF, que han resuelto el problema mediante la colocación de la FlowLayout dentro del GridBagLayout.

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....

Otros consejos

GridBagLayout es el más complicado de los diseños. Si acaba de alinear un par de botones, yo recomendaría usar FlowLayout (por defecto) o BoxLayout. Sin embargo, si desea utilizar GridBagLayout, en lugar de ajustar el ancla, ajustar el gridx sea 1 para el segundo botón. Además, no sé por qué usted tiene un gridy de 3 en lugar de gridy de 0 (a menos que haya otro tipo de código que ha omitido que utiliza gridy de 0-2).

¿Por qué no leer sus publicaciones antiguas primero antes de publicar nuevas preguntas?

, donde dará un enlace al tutorial oscilación en su última publicación. Así que lea el tutorial, probar los ejemplos y utilizar el controlador de distribución apropiado o combinación de los controladores de disposición para el trabajo.

En lugar de GridBagLayout, GridLayout es una solución simple. Es fácil de configurar:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

EDIT:

Sólo por curiosidad, fui a jugar con su original y encontré una combinación que permite el uso de sólo el GridBagLayout. No es muy diferente que el original:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

Este código situar el lado de los botones al lado del otro en el centro de la pantalla.

La clave son:

constraints.fill = GridBagConstraints.NONE; -> hacer los Butons no se expanda

constraints.insets.right = 0; -> hace que los botones están lado a lado

constraints.insets.left = 0; -> hace que los botones están lado a lado

constraints.weightx = 1 -> hace que la célula en wich los botones están expando horizontalmente

constraints.anchor = GridBagConstraints.EAST; -> hace que el botón izquierdo en reposo a la de la célula

constraints.anchor = GridBagConstraints.WEST; -> hace que el botón derecho en reposo a la izquierda de la celda

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }

Le sugiero que lea el tutorial para GridBagLayout ya que está fuera de la caja del gestor de diseño más avanzado y hace que los demás obsoleto. Es bien vale la pena aprender por esas razones. Hace que todo sea simple si se piensa en él como una rejilla y todo lo que tiene que conseguir en ese momento es la coordenadas X e Y que es lo que se ha perdido en el código. Usted estaba casi allí:)

Los administradores de diseño de mezcla suele ser una muy mala idea ya que todos ellos funcionan de forma ligeramente diferente cuando se trata de llenar los envases con espacio adicional.

@camickr Sobre la base de mi pueblo comentario debería usar GridBagLayout ya que es el más flexible y se puede utilizar en cualquier situación. Tener un solo debería dar como resultado pudo sencilla y fácil de mantener. También creo que es muy fácil de leer, ya que se asigna lógicamente. Los contstraints sólo cambian si se utiliza uno limitaciones de objeto para todos los componentes, lo cual es obviamente una mala idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top