如何设定jbutton的大小(使其大小固定,不因布局方式改变而改变???)

xqingww


  
   论坛头衔:论坛游民
   会员级别:三级
   站内职务:无
  专家分:0 分
   经验: 20
   魅力: 0
   财富: 10.0 J元
信誉: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

点击查看用户来源及管理<br>发贴IP:*.*.*.* 2003-05-24 15:35:36    鲜花(0)    鸡蛋(0)  删除此贴  放入精华区 

lws_home


  
   论坛头衔:论坛游民
   会员级别:七级
   站内职务:无
  专家分:0 分
   经验: 274
   魅力: 0
   财富: 10.0 J元
信誉:100
   帖数:44
   积分:518
   注册:2002-08-29

鲜花(0)  鸡蛋(0)

给lws_home发送一个短消息  把lws_home加入好友  查看lws_home的个人资料    访问lws_home的主页 得分:0

第2楼

       发贴心情  提交N次未能成功后的Test 
不知这会提交能不能成功 ......

----------------------------------------------

点击查看用户来源及管理<br>发贴IP:*.*.*.* 2003-05-27 01:26:05    鲜花(0)    鸡蛋(0)  删除此贴  放入精华区 

lws_home


  
   论坛头衔:论坛游民
   会员级别:七级
   站内职务:无
  专家分:0 分
   经验: 274
   魅力: 0
   财富: 10.0 J元
信誉:100
   帖数:44
   积分:518
   注册:2002-08-29

鲜花(0)  鸡蛋(0)

给lws_home发送一个短消息  把lws_home加入好友  查看lws_home的个人资料    访问lws_home的主页 得分: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(); 


}

----------------------------------------------

点击查看用户来源及管理<br>发贴IP:*.*.*.* 2003-05-27 08:02:41    鲜花(0)    鸡蛋(0)  删除此贴  放入精华区 

边城狂人


  
   论坛头衔:黑侠
   会员级别:九级
   站内职务:论坛正式版主
  专家分:0 分
   经验: 113
   魅力: 7
   财富: 0.0 J元
信誉:100
   帖数:585
   积分:1195
   注册:2003-06-02

鲜花(7)  鸡蛋(0)

给边城狂人发送一个短消息  把边城狂人加入好友  查看边城狂人的个人资料    访问边城狂人的主页 得分:0

第4楼

       发贴心情  回复: 如何设定jbutton的大小(使其大小固定,不因布局方式改变而改变???) 
推荐使用 validate 或者 revalidate 来代替 doLayout 
另,可以使用 setPreferredSize 来设置最优先选择的大小,也就是说,如果不是由于 Layout 等原因导致它的大小必须改变的话,它的大小就是 setPreferredSize 设置的大小。

----------------------------------------------
-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=- 
` / 边城客栈 (OUTINN) 
` __________/II\___ 
` / _[]_ /____ 边城狂人 (James Fancy) 
`/_________/| () |\__

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是修改后的代码,它将使控件大小自适应窗口大小: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class FunctionSelectionFrame extends JFrame { public FunctionSelectionFrame() { setTitle("功能选择界面"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 创建按钮 JButton btnFunction1 = new JButton("功能1"); JButton btnFunction2 = new JButton("功能2"); JButton btnFunction3 = new JButton("功能3"); // 设置按钮点击事件 btnFunction1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能1的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能1"); } }); btnFunction2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能2的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能2"); } }); btnFunction3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 功能3的逻辑处理 JOptionPane.showMessageDialog(null, "你点击了功能3"); } }); // 设置布局和添加按钮 setLayout(new GridLayout(3, 1)); add(btnFunction1); add(btnFunction2); add(btnFunction3); pack(); // 自适应窗口大小 setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new FunctionSelectionFrame(); } }); } } ``` 在这个修改后的代码,我使用了`GridLayout`布局管理器,在窗口上创建了一个3行1列的网格布局,并将按钮添加到每个网格。然后使用`pack()`方法来自适应窗口大小,这样控件的大小就会随着窗口大小改变而自动调整。最后,通过调用`setVisible(true)`来显示窗口。你可以根据自己的需求修改和扩展代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值