最后在做一个俄罗斯方块的小游戏,看着视频做挺简单的,都是手把手的,一行代码一行代码的教.. 自己亲自动手做,才发现难,真难.在界面布局这块就出问题,走不动了. 游戏主要分三块显示区, 主游戏区,下一个游戏图形区,游戏状态区(速度,得分)
每一个显示区放在一个JPanel中,用了N种布局方式,显示出来总有问题.
1. BorderLayout的时候,中间区域总是最大,右边显示不出界面(右边大小总是很小,用jpanel.setSize()改变JPANEL大小不管用), 这种布局方式本来就是左右宽度不变,上下高度不变,在窗口改变大小的时候.
2. FlowLayout的时候,两个jpanel显示出来了,但是只有一丁点小.如上设置大小不管用.
3. gridLayout的时候,两个jpanel总是一样的大,但是这太不符合游戏风格了吧,左边的主游戏区要大一些才合理.
最后不得己,采用绝对定位的方式来布局,勉强算过去了,但是心一直不安,Swing不会这么菜,布局这么栏,这点功能都实现不了?
在网上搜索了很久,用Eclipse不断的尝试小程序,.终于还是让我发现了问题的根源.[size=medium]
在设置JPanel大小的时候,要用JPanel.setPreferredSize()这个方法才行.
哈哈,问题总算是解决了,回去后再改代码吧.用这个方法改JPanel大小之后,立马显示出来效果,大borderLayout中上下左右就可以控制宽度了.哈哈
以下是个小小的测试代码
[/size]
-
import
java.awt.BorderLayout;
-
import
java.awt.Dimension;
-
-
import
javax.swing.BorderFactory;
-
import
javax.swing.JButton;
-
import
javax.swing.JFrame;
-
import
javax.swing.JLabel;
-
import
javax.swing.JPanel;
-
import
javax.swing.JToolBar;
-
-
-
public
class
MainFrame
extends
JFrame{
-
-
-
-
-
public
static
void
main(String[] args) {
-
-
MainFrame mai=
new
MainFrame();
-
mai.setLayout(
new
BorderLayout());
-
JToolBar jtoolbar=
new
JToolBar();
-
JLabel jl=
new
JLabel(
"state"
);
-
jtoolbar.add(jl);
-
JPanel jpanel1=
new
JPanel();
-
JButton jb1=
new
JButton(
"North"
);
-
-
jpanel1.setPreferredSize(
new
Dimension(
300
,
150
));
-
jpanel1.add(jb1);
-
jpanel1.setBorder(BorderFactory.createEtchedBorder());
-
JButton jb2=
new
JButton(
"Center"
);
-
-
-
mai.add(jpanel1,BorderLayout.EAST);
-
mai.add(jb2,BorderLayout.CENTER);
-
mai.add(jtoolbar,BorderLayout.SOUTH);
-
mai.setSize(
300
,
400
);
-
mai.setVisible(
true
);
-
mai.setDefaultCloseOperation(EXIT_ON_CLOSE);
-
-
}
-
-
}
-
作为一个
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