Pregunta

Estoy utilizando un GridBagLayout que (actualmente) mostrar dos filas. Soy consciente de esta disposición es excesiva para esta tarea, pero estoy tratando de aprender cómo usarlo. El problema es que he añadido los dos paneles de las dos filas separadas y hay una enorme brecha en torno a la (imagen del mar y código de abajo) contenido: texto alternativo http://www.imagechicken.com/uploads/1264533379009864500.png

Image background;
    public Table(){
        super();
        ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
        background = ii.getImage();
        setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);

        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;

        JButton button = new JButton("hello world");
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,100));
        panel1.add(button, BorderLayout.CENTER);
        panel1.setBackground(Color.yellow);
        add(panel1, constraints);

        constraints.gridx = 0;
        constraints.gridy = 1;

        JPanel middlePanel = new JPanel();
        middlePanel.setPreferredSize(new Dimension(800,350));
        middlePanel.add(button, BorderLayout.CENTER);
        middlePanel.setBackground(Color.blue);
        add(middlePanel, constraints);


    }
¿Fue útil?

Solución

Por desgracia, con GridBagLayout, si el contenido no llenan todo el recipiente que está en, que se centrará automáticamente todo su contenido dentro de su contenedor. Es por eso que está recibiendo una muy gran brecha.

Existen básicamente dos maneras de solucionar este problema:

  1. La forma más dura: Violín con el GridBagConstraints. Tenía un éxito limitado con este cuando se trata de evitar el comportamiento de centro-ing.
  2. La forma más fácil:. Poner el interior de un GridBagLayout FlowLayout, y luego establecer la alineación de la FlowLayout a la parte superior izquierda, o lo que usted desea

He pedido, y contestado, esta pregunta a mí mismo en algún momento la semana pasada.

Así que en su caso está añadiendo su panel1 y middlePanel directamente al JFrame (?), Con un GridBagLayout

JFrame (GridBagLayout)
 - panel1
 - middlePanel

Yo sugeriría esta estructura alternativa en su lugar, para deshacerse de todo el espacio extra (y la alineación centrada, así, si te gusta).

JFrame (FlowLayout)
 - JPanel (GridBagLayout)
   - panel1
   - middlePanel

HTH

Otros consejos

Uso

constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;

JavaDoc para weightx / weighty dice:

  

Especifica cómo distribuir el espacio adicional horizontal / vertical.

JavaDoc para fill:

  

Este campo se utiliza cuando el área de visualización del componente es mayor   que el tamaño solicitado del componente. Se determina si se debe   cambiar el tamaño del componente, y si es así, cómo.

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