如何设置JPanel大小

转自:http://lookbing.iteye.com/blog/518139


最后在做一个俄罗斯方块的小游戏,看着视频做挺简单的,都是手把手的,一行代码一行代码的教.. 自己亲自动手做,才发现难,真难.在界面布局这块就出问题,走不动了. 游戏主要分三块显示区, 主游戏区,下一个游戏图形区,游戏状态区(速度,得分) 
    每一个显示区放在一个JPanel中,用了N种布局方式,显示出来总有问题. 
1.  BorderLayout的时候,中间区域总是最大,右边显示不出界面(右边大小总是很小,用jpanel.setSize()改变JPANEL大小不管用), 这种布局方式本来就是左右宽度不变,上下高度不变,在窗口改变大小的时候. 
2.  FlowLayout的时候,两个jpanel显示出来了,但是只有一丁点小.如上设置大小不管用. 
3.  gridLayout的时候,两个jpanel总是一样的大,但是这太不符合游戏风格了吧,左边的主游戏区要大一些才合理. 

   最后不得己,采用绝对定位的方式来布局,勉强算过去了,但是心一直不安,Swing不会这么菜,布局这么栏,这点功能都实现不了? 
    在网上搜索了很久,用Eclipse不断的尝试小程序,.终于还是让我发现了问题的根源.[size=medium]在设置JPanel大小的时候,要用JPanel.setPreferredSize()这个方法才行.
哈哈,问题总算是解决了,回去后再改代码吧.用这个方法改JPanel大小之后,立马显示出来效果,大borderLayout中上下左右就可以控制宽度了.哈哈 
    以下是个小小的测试代码 
[/size] 
  
Java代码   收藏代码
  1.  import java.awt.BorderLayout;  
  2. import java.awt.Dimension;  
  3.   
  4. import javax.swing.BorderFactory;  
  5. import javax.swing.JButton;  
  6. import javax.swing.JFrame;  
  7. import javax.swing.JLabel;  
  8. import javax.swing.JPanel;  
  9. import javax.swing.JToolBar;  
  10.   
  11.   
  12. public class MainFrame extends JFrame{  
  13.   
  14.     /** 
  15.      * @param args 
  16.      */  
  17.     public static void main(String[] args) {  
  18.         // TODO Auto-generated method stub  
  19.                  MainFrame mai=new MainFrame();  
  20.                  mai.setLayout(new BorderLayout());  
  21.                  JToolBar jtoolbar=new JToolBar();  
  22.                  JLabel jl=new JLabel("state");  
  23.                  jtoolbar.add(jl);  
  24.                  JPanel jpanel1=new JPanel();  
  25.                  JButton jb1=new JButton("North");  
  26.                    
  27.                  jpanel1.setPreferredSize(new Dimension(300150));//关键代码,设置JPanel的大小  
  28.                  jpanel1.add(jb1);  
  29.                   jpanel1.setBorder(BorderFactory.createEtchedBorder());  
  30.                  JButton jb2=new JButton("Center");  
  31.                    
  32.                    
  33.                  mai.add(jpanel1,BorderLayout.EAST);  
  34.                  mai.add(jb2,BorderLayout.CENTER);  
  35.                  mai.add(jtoolbar,BorderLayout.SOUTH);  
  36.                  mai.setSize(300400);  
  37.                  mai.setVisible(true);  
  38.                  mai.setDefaultCloseOperation(EXIT_ON_CLOSE);  
  39.                    
  40.     }  
  41.   
  42. }  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值