当你写好代码后,窗口的搭建是必不可少的
如何创建一个窗口:
需要用到javax.swing组件以及Java.awt的部分类(为了方便直接全部引用)
import javax.swing.*;
import java.awt.*;
1.直接用swing组件的JFrame类创建一个对象frame
JFrame frame = new JFrame();
设置窗口的位置大小
frame.setBounds(1,2,3,4);//1表示x坐标,2为y坐标,3,4为长宽(自己调试)
或者使用
frame.setLocation(1,2)//单独使用窗口无大小
frame.setSize(3,4);//单独使用窗口出现在左上角
当两者混合使用时,setBounds()方法优先
设置窗口名称
frame.setTitle("扑克牌游戏");
设置窗口退出方式
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点×退出
设置背景颜色,需要先获得Container
Container container = frame.getContentPane();
container.setBackground(Color.blue);//自主选择颜色
之后可以添加各种组件,使用container.add方法
一个简单窗口就算完成了
最后让窗口出现,使用方法
frame.setVisible(true);
2.创建一个类使它继承JFrame类,然后创建该类的对象调用窗口
这种方法与第一种方法相比封装性强,其他差异不大
选择布局
常见的布局有绝对布局,流式布局,边界布局和网格布局
因为我是个初学者,只用按钮来描述各种布局的区别
setLayout(null);//绝对布局
个人理解相当于没有布局,一切布局需要自己手动设置
这时你创建一个按钮
frame.JButton jButton = new JButton("按钮");
如果你不用setBounds方法或者setSize和setLocation方法设置它的大小方位
而直接用container.add(jButton)给窗口添加这个按钮,你会发现根本找不到这个按钮在哪,也就是绝对布局不会帮你做任何事,你得手动设置一切(如果是流式布局,你会在正上方找到那个按钮,甚至大小适中)
所以我们使用方法
jButton.setBounds(1,2,3,4);//参数与窗口的setBounds方法如出一辙
或者使用
jButton.setLocation(1,2);
jButton.setSize(3,4);
然后再进行添加
container.add(jButton);
缺点:边界布局的缺点是在图形变化的过程中,由于每个窗体元素的位置是固定的所以在具体的操作中不够灵活
setLayout(new FlowLayout(FlowLayout.Left,10,10));//流式布局
其中参数分别表示:向左对齐,水平间距是10,垂直间距为10像素
该布局会自动帮多个组件排列,按钮也有默认的大小方位,所以无需手动设置按钮参数
setLayout(new BorderLayout());//边界布局
在添加按钮时,额外给一个参数,包括五种方位(两个参数位置可对调)
container.add(BorderLayout.EAST,jButton1);
container.add(BorderLayout.NORTH,jButton2);
container.add(BorderLayout.SOUTH,jButton3);
container.add(BorderLayout.WEST,jButton4);
container.add(BorderLayout.CENTER,jButton5);
可以设置按钮大小
setLayout(new GridLayout());//网格布局
GridLayout是一个网格布局处理器,它以矩形网格形式对容器的组件进行布置。
它将容器划分为x列个单元格,将组件按照add的顺序依次放入其中,不能跨行跨列,类似表格
各个参数包括
GridLayout();//创建具有默认值的网格布局,即每个组件占据一行一列
GridLayout(int rows, int cols);//创建具有指定行数和列数的网格布局
GridLayout(int rows, int cols, int hgap, int vgap);//指定水平和垂直间距
无需设置按钮大小参数
补充一些组件的用法
//标签
JLabel jLabel = new JLabel("标签");
jLabel.setText("文本");
jLabel.setBounds(100,100,1000,1000);
//图片
JLabel pic = new JLabel();
String path = "C:/Users/cs/Desktop/123.jpg";
Icon icon = new ImageIcon(path);
pic.setIcon(icon);
pic.setBounds(100,100,1000,500);
//文本输入框
JTextField jTextField = new JTextField();
jTextField.setBounds(100,200,300,400);
//单选项按钮
JRadioButton[] jRadioButtons = new JRadioButton[3];
for(int i = 0;i < 3;i++){
jRadioButtons[i] = new JRadioButton("选项"+(i+1));
jRadioButtons[i].setFont(new Font("楷体",Font.PLAIN,15));//字体,格式,大小
}
jRadioButtons[0].setBounds(100,200,400,40);
jRadioButtons[1].setBounds(150,200,400,40);
jRadioButtons[2].setBounds(200,200,400,40);
ButtonGroup group = new ButtonGroup();//实现单选
//复选项
String[] name = {"jack","mary"};
JComboBox jComboBox = new JComboBox(name);
jComboBox.setBounds(100,200,300,400);
container.add(jLabel);
container.add(pic);
container.add(jTextField);
for(int i = 0;i < 3;i++){
container.add(jRadioButtons[i]);
group.add(jRadioButtons[i]);//实现单选
}
container.add(jComboBox);
一个简单的监听
//监听
final JButton jButton = new JButton("hello");
jButton.setBounds(100,100,100,100);
jButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jButton.setText("按钮被点击");
}
});
container.add(jButton);