我使用了绝对定位(setBounds和null布局),现在开始练习布局管理器,这段代码是用gridbag布局的,但是很少组件没有显示,或者是单元格有一些问题,或者是其他的东西,请帮助!
import java.util.StringTokenizer; import java.awt.event.*; import java.awt.*; import javax.swing.*; 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); setVisible(true); 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,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)); addComponent(sin,0,2,1,2,new Insets(4,4,4,4)); addComponent(cos,1,2,2,2,new Insets(4,4,4,4)); addComponent(tan,2,2,3,2,new Insets(4,4,4,4)); // this is not displayed addComponent(clear,3,2,4,2,new Insets(4,4,4,4)); addComponent(negate,0,3,1,3,new Insets(4,4,4,4)); // these 4 are not visible addComponent(inverse,1,3,2,3,new Insets(4,4,4,4)); addComponent(zero,2,3,3,3,new Insets(4,4,4,4)); addComponent(one,3,3,4,3,new Insets(4,4,4,4)); pack(); } public static void main(String...args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new Calculator(); } }); } }
首先,在使用布局方面做得很好!
我立即跳出来的是值传递给GridWidthead
和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));
基本上,这是说,将add
添加到网格x/y位置0x1,具有1x1
的gridwidth
/gridheight
。
然后在x/y位置1x1
处添加sub
,使用1x2
的GridWidth
/GridHeight
,好吗...
然后在x/y位置2x1
处添加MUL
和1x3
的GridWidth
/GridHeight
,现在我们开始遇到问题...基本上,sub
实际上扩展到了我们的单元格,覆盖了我们的一部分!
GridWidth
和GridHeight
允许您定义组件将扩展到多少个单元格,大多数情况下,您希望该单元格为1x1
当我将所有GridWidth
和GridHeight
值更正为1x1
时,我就可以得到以下内容
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();
}
});
}
}
想要这样格式化它。灰色部分显示jpanel部分。最初,我想要正确地布局前2个jpanel。这是行不通的。怎么修?
我正在尝试使用,但没有得到我所期望的结果,并且在此代码中找不到错误: 这张图说明了我需要: 黄色是按钮名称,红色是行和列。 谁能解释一下我的代码出了什么问题吗?
我正在尝试创建以下GUI: 但我制作的GUI是: 我的网格是什么样子的: Image:此文件的GRIDLAYOUT addComp adds方法在给定的(x,y)位置和给定的组件宽度和高度处将输入组件添加到输入面板。 代码:
嗨,我是java初学者,正在使用GridBagLayout制作小型GUI。请参阅附带的代码和输出。我想要的是按照gridx和gridy中分配的位置将JButtons放置在左上角。但它把组件放在中心,而不是像预期的左上角,如果我使用插图,gridx/Gridy所有的工作,但不是从适当的坐标,所以请看附上的代码和图像,并指导我关于它 输出:想要左上角的按钮,请指点
我有一些代码生成以下内容: 我希望3、4和5个JTextFields在JLabels旁边,就像1和2一样。我的代码是尝试这样做,但上面的图像是结果。 有人能指出我代码中的问题吗?
我对GridBagLayout这一主题不熟悉,我无法理解约束、重量和填充之间的确切区别。 我可以而不分配。 除非您指定了至少一个非零值,否则所有组件都会聚集在其容器的中心。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空间。 我的问题是,如果这是真的,那么为什么组件之间没有空间,它们看起来是连接的?