GridBagLayout no funciona correctamente

Trabajé con posicionamiento absoluto (setBounds y diseño nulo) y ahora comencé a practicar administradores de diseño, este código es con diseño de gridbag, pero algunos componentes no se muestran, o hay algún problema con las celdas o algo más, ¡ayuda!

importar java.util.StringTokenizer; importar java.awt.event.*; importar java.awt.*; importar javax.swing.*; La calculadora de clase extiende JFrame { JButton add,sub,mul,div,sin,cos,tan,clear,negate,inverse,zero,one,two,tres,four,five,six,sie,ocho,nine,equalTo,percentage, sqrt; entrada JTextField; GridBagLayout gbl; privado void addComponent(Component componente,int gridx, int gridy, int gridwidth, int gridheight,Insets insets) { add(component, new GridBagConstraints(gridx, gridy,gridwidth, gridheight, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, recuadros, 0,0)); } Calculadora() { //establecerTamaño(500,400); setVisible(verdadero); setLayout(gbl=nuevo GridBagLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); agregar = nuevo JButton("+"); sub= nuevo JButton("-"); mul= nuevo JButton("*"); div= nuevo JButton("/"); sin= new JButton("sin"); cos = new JButton("cos"); bronceado= new JButton("bronceado"); borrar = nuevo JButton ("C"); negar = new JButton ("neg"); inversa= nuevo JButton("1/x"); cero= nuevo JButton("0"); uno = nuevo JButton ("1"); dos = nuevo JButton("2"); tres = nuevo JButton ("3"); cuatro= nuevo JButton("4"); cinco = nuevo JButton ("5"); seis = nuevo JButton ("6"); siete= nuevo JButton("7"); ocho= nuevo JButton("8"); nueve = nuevo JButton ("9"); igual a = nuevo JButton("="); porcentaje= nuevo JButton("%"); sqrt= new JButton("sqrt"); entrada = nuevo JTextField(20); addComponent(entrada,0,0,0,1,nuevos recuadros(10,10,100,4)); //tldr addComponent(add,0,1,1,1,nuevos recuadros(4,4,4,4)); addComponent(sub,1,1,2,1,nuevos recuadros(4,4,4,4)); addComponent(mul,2,1,3,1,nuevos recuadros(4,4,4,4)); // esto no se muestra addComponent(div,3,1,4,1,new Insets(4,4,4,4)); addComponent(sen,0,2,1,2,nuevos recuadros(4,4,4,4)); addComponent(cos,1,2,2,2,insertos nuevos(4,4,4,4)); addComponent(tan,2,2,3,2,nuevos recuadros(4,4,4,4)); // esto no se muestra addComponent(clear,3,2,4,2,new Insets(4,4,4,4)); addComponent(negar,0,3,1,3,nuevos recuadros(4,4,4,4)); // estos 4 no son visibles addComponent(inverse,1,3,2,3,new Insets(4,4,4,4)); addComponent(cero,2,3,3,3,insertos nuevos(4,4,4,4)); addComponent(uno,3,3,4,3,insertos nuevos(4,4,4,4)); embalar(); } public static void main(String...args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new Calculator(); } }); } }

preguntado Oct 19 '13, 07:10

1 Respuestas

En primer lugar, ¡bien hecho por intentar usar diseños!

Lo que me llama la atención de inmediato es que los valores están pasando a gridwidth y gridheight

addComponent(add,0,1,1,1,new Insets(4,4,4,4));
addComponent(sub,1,1,2,1,new Insets(4,4,4,4));
addComponent(mul,2,1,3,1,new Insets(4,4,4,4)); // this is not displayed
addComponent(div,3,1,4,1,new Insets(4,4,4,4));

Básicamente esto es decir, agregar add a la cuadrícula x/y posición 0x1, con un gridwidth/gridheight of 1x1, bien hasta ahora.

Luego agrega sub en la posición x/y 1x1 con un gridwidth/gridheight of 1x2, bueno...

Luego agrega mul en la posición x/y 2x1 con un gridwidth/gridheight of 1x3, ahora empezamos a tener problemas... Básicamente, sub en realidad está gastando en nuestra celda, ¡cubriendo parte de nosotros!

gridwidth y gridheight le permite definir en cuántas celdas se expandirá el componente, la mayoría de las veces, desea que esto sea 1x1

Una vez corregido todo el gridwidth y gridheight valores a 1x1, pude conseguir esto

enter image description here

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

class Calculator extends JFrame {

    JButton add, sub, mul, div, sin, cos, tan, clear, negate, inverse, zero, one, two, three, four, five, six, seven, eight, nine, equalTo, percentage, sqrt;
    JTextField input;
    GridBagLayout gbl;

    private void addComponent(Component component, int gridx, int gridy, int gridwidth, int gridheight, Insets insets) {
        add(component, new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, insets, 0, 0));
    }

    Calculator() {
        //setSize(500,400);
        setLayout(gbl = new GridBagLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        add = new JButton("+");
        sub = new JButton("-");
        mul = new JButton("*");
        div = new JButton("/");
        sin = new JButton("sin");
        cos = new JButton("cos");
        tan = new JButton("tan");
        clear = new JButton("C");
        negate = new JButton("neg");
        inverse = new JButton("1/x");
        zero = new JButton("0");
        one = new JButton("1");
        two = new JButton("2");
        three = new JButton("3");
        four = new JButton("4");
        five = new JButton("5");
        six = new JButton("6");
        seven = new JButton("7");
        eight = new JButton("8");
        nine = new JButton("9");
        equalTo = new JButton("=");
        percentage = new JButton("%");
        sqrt = new JButton("sqrt");
        input = new JTextField(20);

        addComponent(input, 0, 0, 0, 1, new Insets(10, 10, 100, 4)); //tldr

        addComponent(add, 0, 1, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(sub, 1, 1, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(mul, 2, 1, 1, 1, new Insets(4, 4, 4, 4)); // this is not displayed
        addComponent(div, 3, 1, 1, 1, new Insets(4, 4, 4, 4));

        addComponent(sin, 0, 2, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(cos, 1, 2, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(tan, 2, 2, 1, 1, new Insets(4, 4, 4, 4)); // this is not displayed
        addComponent(clear, 3, 2, 1, 1, new Insets(4, 4, 4, 4));

        addComponent(negate, 0, 3, 1, 1, new Insets(4, 4, 4, 4)); // these 4 are not visible
        addComponent(inverse, 1, 3, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(zero, 2, 3, 1, 1, new Insets(4, 4, 4, 4));
        addComponent(one, 3, 3, 1, 1, new Insets(4, 4, 4, 4));
        pack();
        setVisible(true);
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Calculator();
            }

        });
    }

}

Respondido 19 Oct 13, 07:10

estaba tomando el ancho de la cuadrícula, la altura de la cuadrícula como absoluta, en lugar de posicional (relativa), que fue el error: Gagan93

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.