GridBagLayout 布局管理器 80

importjava.awt.BorderLayout;importjava.awt.GridBagConstraints;importjava.awt.GridBagL... import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class calculator extends JFrame{
public calculator() {
super("calculator");
this.setSize(300, 400);
this.setResizable(false);
this.setVisible(true);
this.setLocation(400, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel p1 = new JPanel();
this.add(p1);
BorderLayout bl = new BorderLayout();
p1.setLayout(bl);
TextField tf = new TextField();
JPanel p2 = new JPanel(new GridBagLayout());
p1.add(tf, BorderLayout.NORTH);
p1.add(p2, BorderLayout.CENTER);
String[] string = {
"x", "/", "+", "-",
"1", "2", "3", "4",
"5", "6", "7", "8",
"9", "0", "=", "."
};
JButton[] bt = new JButton[string.length];
for(int i=0; i<string.length; i++) {
bt[i] = new JButton(string[i]);
}
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill=GridBagConstraints.NONE;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
for(int i=0; i<3; i++) {
if(i == 2) {
gbc.gridwidth = GridBagConstraints.REMAINDER;
}
p2.add(bt[i]);
}
gbc.weightx = 0.0;
p2.add(bt[4]);
p2.add(bt[5]);
p2.add(bt[6]);
gbc.gridheight = 2;
gbc.gridwidth = GridBagConstraints.REMAINDER;
p2.add(bt[3]);
}

public static void main(String[] args) {
new calculator();
}

}
为什么那按钮没有在TextField下面, 而是在中间呢?
是GridbagLayout问题, 并且能教教我GridbagLayout怎么使用!!
展开
 我来答
luoluoyide
2012-11-18 · TA获得超过397个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:283万
展开全部
p1.add(tf, BorderLayout.CENTER);
p1.add(p2, BorderLayout.SOUTH);
试一试把文本框放在中间,把p2放在南边。
更多追问追答
追问
这不是我想要的结果, 我就是想放在后面, 我还有按钮没有加, 你知道GridBagLayout布局管理器怎么用???
追答
那你说一说你的最终效果是怎么样的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑香飘雨
2012-11-18 · TA获得超过515个赞
知道小有建树答主
回答量:172
采纳率:100%
帮助的人:131万
展开全部
p1.add(p2, BorderLayout.CENTER);你把p2加到了p1的中间了,p1的布局管理器是BorderLayout,p2是GridLayout他们是两个控件,p1.add(p2, BorderLayout.CENTER);中第二个参数说的是p2在p1中的布局,你把它换成p1.add(p2, BorderLayout.NORTH);试试吧!!!
更多追问追答
追问
不行, 你吧textfield覆盖了!! 你知道GridBagLayout布局管理器怎么用?
追答
这种东西呢,学习的最好的地方就是去查API,只要把API研究了,知道具体的参数引用是怎么回事,就行了,如果不懂就去下载个计算器的源代码或者日历的源代码学习,本身我主要做WEB对swing研究的也不多,只是知道怎么用,没具体写过什么,不过能看懂API,用到的时候查就是了!!别人给你写代码你只是会看,自己去研究,去体会每个构造方法和函数的用途,如果你不知道API上是怎么回事,我可以给你解释!!!源代码要的话我电脑里也有,可以发给你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友accea68
2012-11-20
知道答主
回答量:31
采纳率:0%
帮助的人:17.4万
展开全部
你用netBeans试试,可以可视化操作的,设置面板布局gridbag,然后定制布局
手写代码太受罪了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶之所思
2012-11-21 · TA获得超过101个赞
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:96.6万
展开全部
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class calculator extends JFrame {
private static final long serialVersionUID = 5648140659738554239L;

public calculator() {
super("calculator");
this.setSize(230, 200);
this.setResizable(false);
this.setVisible(true);
this.setLocation(400, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel p1 = new JPanel();
this.add(p1);
BorderLayout bl = new BorderLayout();
p1.setLayout(bl);
TextField tf = new TextField();
GridBagLayout gridBagLayout = new GridBagLayout();
JPanel p2 = new JPanel(gridBagLayout);
p1.add(tf, BorderLayout.NORTH);
p1.add(p2, BorderLayout.CENTER);
String[] string = { "x", "/", "+", "-", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=" };
JButton[] bt = new JButton[string.length];
for (int i = 0; i < string.length; i++) {
bt[i] = new JButton(string[i]);
}
GridBagConstraints gbc = new GridBagConstraints();
gridBagLayout.rowHeights = new int[] { 25, 25, 25, 25 };
gridBagLayout.columnWidths = new int[] { 40, 40, 40, 40 };
p2.setBackground(Color.pink);
gbc.fill = GridBagConstraints.NONE;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weightx = 0.2;
gbc.weighty = 0.2;
gbc.gridx = 3;
for (int i = 0; i < 4; i++) {
p2.add(bt[i]);
gbc.gridy = i;
gridBagLayout.setConstraints(bt[i], gbc);
}
for (int i = 4; i < 16; i++) {
p2.add(bt[i]);
gbc.gridy = ((i - 4) / 3);
gbc.gridx = ((i - 4) % 3);
gridBagLayout.setConstraints(bt[i], gbc);
}
p1.setVisible(true);
}

public static void main(String[] args) {
new calculator();
}
}
//除了麻烦,没发现有任何优点。你自己看看吧!!!!
追问
呵呵,我就是想了解一下GridbagLayout布局管理器,  我看了API好多不懂,于是来问问,  你可以把那按钮大小设置成不一样吗,  如果是这样我可以用GridLayout, 你有时间吗? 帮我解释一下GridBagLayout里面几个属性!!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式