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

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

作为一个 java 初学者,我非常了解一个才接触程序开发的急切心情,希望这个实例能对更多的学者更多的帮助,涉及范围:GUI(JFrame 、 JPanel java IO 、集合、、) JPanel jpanel = setBgImg(); jpanel .set Layout (null); //用户名标签及其文本框 JLabel userNameLabel = new JLabel("用户名:"); userNameLabel.setFont(new Font("宋体",Font.BOLD,30));//字体 大小 设置 userNameLabel.setForeground(Color.decode("#000000"));//字体颜色 设置 userNameLabel.setBounds(350,430,128,40); jpanel .add(userNameLabel); userNameText = new JTextField(); userNameText.setBounds(470,430,150,40); jpanel .add(userNameText); //密码标签及其密码框 JLabel userpwdLabel = new JLabel("密码:"); userpwdLabel.setFont(new Font("宋体",Font.BOLD,30));//字体 大小 设置 userpwdLabel.setForeground(Color.decode("#000000"));//字体颜色 设置 userpwdLabel.setBounds(350,480,128,40); jpanel .add(userpwdLabel); userpwdText = new JPasswordField(); userpwdText.setBounds(470,480,150,40);
Java 调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。   public class ZipDemo extends JFrame{   JFileChooser fileChooser; //文件选择器   JList fileList; //待压缩的文件列表   Vector files; //文件数据(待压缩文件)   JButton jbAdd; //增加文件按钮   JButton jbDelete; //删除文件按钮   JButton jbZip; //压缩按钮   JTextField target; //目标文件文本域   public ZipDemo(){   super("用ZIP压缩多个文件"); //调用父类构造函数   fileChooser=new JFileChooser(); //实例化文件选择器   files=new Vector(); //实例化文件数据Vector   fileList=new JList(files); //实例化已选择文件列表   jbAdd=new JButton("增加"); //实例化按钮组件   jbDelete=new JButton("删除");   jbZip=new JButton("压缩");   target=new JTextField(18); JPanel panel =new JPanel (); //实例化面板,用于容纳按钮 panel .add(jbAdd); //增加组件到面板上 panel .add(jbDelete); panel .add(jbZip); JPanel panel 2=new JPanel (); panel 2.add(new JLabel("目标文件")); panel 2.add(target);   JScrollPane jsp=new JScrollPane(fileList);   Container container=getContentPane(); //得到容器   container.add( panel 2,Border Layout .NORTH); //增加组件到容器   container.add(jsp,Border Layout .CENTER);   container.add( panel ,Border Layout .SOUTH);   jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); // 设置 边界
ImageIcon iamge = new ImageIcon("kehudaun/image/cou.gif"); iamge.setImage(iamge.getImage().getScaledInstance(351,40,Image.SCALE_DEFAULT)); jbl1 = new JLabel(iamge); 这里把图片的 大小 改为351px * 40px效果 原本直接添加图片使用jbl1 = new JLabel(new ImageIcon("kehudaun/image/cou.gi