论坛头衔:论坛游民
会员级别:三级
站内职务:无
专家分:0 分
经验:
魅力:
财富:
信誉:100
帖数:81
积分:198
注册:2003-03-05
鲜花(0) 鸡蛋(0)
有时候使用JButton,发现setSize()失效了,为什么呢?是因为受Layout的影响。那么这种时候该怎么办呢?以下系转载:
回复: 如何设定jbutton的大小(使其大小固定,不因布局方式改变而改变???)
setSize(int,int)
--------------------------------------
请来新网站 http://longsky.xeonserver.com/list.asp?boardid=20
----------------------------------------------
请来新网站 http://longsky.xeonserver.com/list.asp?boardid=20
论坛头衔:论坛游民
会员级别:七级
站内职务:无
专家分:0 分
经验:
魅力:
财富:
信誉:100
帖数:44
积分:518
注册:2002-08-29
鲜花(0) 鸡蛋(0)
得分:0第2楼
提交N次未能成功后的Test不知这会提交能不能成功 ......
----------------------------------------------
2003-05-27 01:26:05 鲜花(0) 鸡蛋(0)论坛头衔:论坛游民
会员级别:七级
站内职务:无
专家分:0 分
经验:
魅力:
财富:
信誉:100
帖数:44
积分:518
注册:2002-08-29
鲜花(0) 鸡蛋(0)
得分:0第3楼
Java最好的摆放控件方式这个问题对很多Java程序员来讲都会困惑一段时间。说到底,是Java又想跨平台,又想提供最简便的方法造成的。我想提问者一定试验过setSize(int,int)的方法。但是好像不起作用是不是? 而且,有的时候界面可能比较复杂,你用“盒子套盒子”的方式往往会弄乱,或者希望某个东西不变大小是很困难的事情。关键还有就是觉得效率不高。如果你用过VB, 我想你一定会觉得摆放、调整VB控件要容易得多。我总结最好的方法就是用VB的方式来做。也许你会说这可要保证跨平台。答案当然是肯定的。:)
步骤如下:
1、setLayout(null); //这是为了不让Java自行控制控件的摆放,你抓住所以的控制权。:)
2、重写public void doLayout(); 在这里面,你可以任意控制你的控件的大小位置,就像VB一样。当然,为了跨平台的要求,你又找到合适的值来控制他们的大小和位置。
3、在doLayout方法的最后千万别忘了:super.doLayout();
现在试举一例:
import java.awt.*;
//建议先把控件放到Panel上,然后把这个Panel放到相应的Frame上。因为,Frame有边,也就是说,如果你把某个控件放到(0,0)的位置,你会发现他第一部方将被盖住。而Panel就没有这个问题。而你要想找到这个边的数据还不是件很容易的事情,所以咱们就麻烦Java帮咱们做吧:)
public class T1 extends Panel{
private Label labName = new Label("Name");
private Label labPwd = new Label("Password");
private TextField txtName = new TextField();
private TextField txtPwd = new TextField();
private Button btnOK=new Button("OK");
private Button btnCancel = new Button("Cancel");
public T1(){
initMe();
}
private void initMe(){
setLayout(null);
add(labName);
add(labPwd);
add(txtName);
add(txtPwd);
add(btnOK);
add(btnCancel);
}
public void doLayout(){
int stdW = (int)labPwd.getPreferredSize().getWidth();
int stdH = (int)labPwd.getPreferredSize().getHeight();
int spaceV=stdW/3;
int spaceH=stdW/3;
int stdBtnW =(int)btnCancel.getPreferredSize().getWidth();
int stdBtnH =(int)btnCancel.getPreferredSize().getHeight();
int wholeW = spaceH+stdW+spaceH+stdW*2+spaceH;
int wholeH = spaceV+stdH+spaceV+stdH+stdBtnH+stdH+spaceH;
int stdX=((int)this.getSize().getWidth()-wholeW)/2;
int stdY=((int)this.getSize().getHeight()-wholeH)/2;
//for name line
int x = stdX;
int y = stdY;
int w = stdW;
int h = stdH;
labName.setBounds(x,y,w,h);
x += stdW + spaceH;
w = stdW*2;
txtName.setBounds(x,y,w,h);
//for password line
x = stdX;
y+= h+spaceV;
w = stdW;
labPwd.setBounds(x,y,w,h);
x += stdW + spaceH;
w = stdW*2;
txtPwd.setBounds(x,y,w,h);
//for button line
x = stdX+(wholeW-stdBtnW*2-spaceH)/2;
y+= h+spaceV;
w = stdBtnW;
h = stdBtnH;
btnOK.setBounds(x,y,w,h);
x += w+spaceH;
btnCancel.setBounds(x,y,w,h);
super.doLayout(); //千万别忘了
}
public static void main (String args[]) {
Frame fMain=new Frame("Login");
T1 t=new T1();
fMain.add(t);
fMain.setSize(400,300);
fMain.setResizable(false);
fMain.show();
}
}
----------------------------------------------
2003-05-27 08:02:41 鲜花(0) 鸡蛋(0)论坛头衔:黑侠
会员级别:九级
站内职务:论坛正式版主
专家分:0 分
经验:
魅力:
财富:
信誉:100
帖数:585
积分:1195
注册:2003-06-02
鲜花(7) 鸡蛋(0)
得分:0第4楼
回复: 如何设定jbutton的大小(使其大小固定,不因布局方式改变而改变???)推荐使用 validate 或者 revalidate 来代替 doLayout
另,可以使用 setPreferredSize 来设置最优先选择的大小,也就是说,如果不是由于 Layout 等原因导致它的大小必须改变的话,它的大小就是 setPreferredSize 设置的大小。
----------------------------------------------
-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
` / 边城客栈 (OUTINN)
` __________/II\___
` / _[]_ /____ 边城狂人 (James Fancy)
`/_________/| () |\__