当前位置: 代码迷 >> J2SE >> 前辈们快的来帮帮我(关于JButton按钮布局大小的有关问题!)
  详细解决方案

前辈们快的来帮帮我(关于JButton按钮布局大小的有关问题!)

热度:87   发布时间:2016-04-23 19:42:51.0
前辈们快的来帮帮小弟我(关于JButton按钮布局大小的问题!)
代码如下:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.FlowLayout;
public class Calculator 
{
JFrame jf1=null;
JTextField jtf1=null;
JButton bk,ce,c,ab,chu,cheng,jian
,jia,ecfg,chub,yds,eq,zf,dian=null;
JButton[] shu=new JButton[10];
double sum=0;
public void display()
{
jf1=new JFrame("简易计算器");
jf1.setLocation(380,260);
jf1.setSize(360, 230);
jf1.setLayout(new FlowLayout(FlowLayout.CENTER));
jtf1=new JTextField(31);
jtf1.setText("0");
jtf1.setHorizontalAlignment(JTextField.RIGHT);
jtf1.setEditable(false);
jf1.add(jtf1);
JPanel disTop=new JPanel();
disTop.setLayout(new GridLayout(1,4,3,3));
bk=new JButton("  Back    ");
disTop.add(bk);
ce=new JButton("  CE    ");
disTop.add(ce);
c=new JButton("  C    ");
disTop.add(c);
ab=new JButton("  About    ");
disTop.add(ab);
jf1.add(disTop);
JPanel disMain=new JPanel();
jf1.add(disMain);
disMain.setLayout(new GridLayout(1,2,10,10));
JPanel disLeft=new JPanel();
for(int i=9;i>=0;i--)
{
shu[i]=new JButton(String.valueOf(i));
disLeft.add(shu[i]);
}
dian=new JButton(".");
zf=new JButton(" +/- ");
disLeft.add(zf);
disLeft.add(dian);
disMain.add(disLeft);
disLeft.setLayout(new GridLayout(4,3,3,3));
chu=new JButton("/");
ecfg=new JButton("sqrt");
cheng=new JButton("*");
chub=new JButton("%");
jian=new JButton("-");
yds=new JButton("1/x");
jia=new JButton("+");
eq=new JButton("=");
JPanel disRight=new JPanel();
disRight.add(chu);
disRight.add(ecfg);
disRight.add(cheng);
disRight.add(chub);
disRight.add(jian);
disRight.add(yds);
disRight.add(jia);
disRight.add(eq);
disRight.setLayout(new GridLayout(4,2,3,3));
disMain.add(disRight);
jf1.setVisible(true);
jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) 
{
new Calculator().display();
}
}

运行如下:


代码修改如下:
1、改47行为:zf=new JButton("+/-"); 
2、改57行为:yds=new JButton("     1/x     ");
这运行如下:

问题如下:
1、代码一:第47行的(" +/- "),左右才空了一个空格就有如下运行的效果。而修改后第57行的("     1/x     "),左右空了五个空格,运行效果,还不如第一个运行效果的按钮大,这是什么原因了?
------解决思路----------------------
网格布局将组件分成大小相同的矩形

你的disMain组件是个网格布局,分成2块,

disLeft 和disRight也是网格布局,格子数不同,但是他们的总大小是相同的

第一次,根据" +/- "的宽度 计算了disLeft 的总大小,disRight根据这个面积分割
第二次,根据"     1/x     "的宽度计算disRight的总大小,disLeft 根据这个面积分割
------解决思路----------------------
调整控件的大小,不要靠里面的文字来调整。。正确的方法应该是使用布局来限定大小;
你使用的是网格布局,在每个布局内部控件应该是等宽的。如果你想让按钮有大有小,应该使用其他的布局,比如GridBagLayout。