GridBagLayout no funciona correctamente
Frecuentes
Visto 776 equipos
0
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(); } }); } }
1 Respuestas
5
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
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java swing layout gridbaglayout or haz tu propia pregunta.
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