Swing提供了三个主要的顶级容器类:JFrame, JDialog和JApplet。接下来进行对JFrame和JDialog的学习。
1. JFrame
package cn.edu.sdut.acm;
import javax.swing.*;
import java.awt.*;
public class Main{
public static void main(String[] args){
JFrame f = new JFrame("窗体标题"); // 创建窗体对象
f.setVisible(true); // 设置窗体可见
/*
窗体关闭规则:
EXIT_ON_CLOSE 隐藏窗体并停止程序
DO_NOTHING_ON_CLOSE 无任何操作
HIDE_ON_CLOSE 隐藏窗口但不停止程序
DISPOSE_ON_CLOSE 释放窗体资源
*/
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// f.setSize(300, 200); // 设置宽高,单位为像素
// f.setLocation(200, 200); // 设置窗体出现的默认坐标,单位为像素
f.setBounds(200, 200, 300, 200); // 设置窗体坐标和大小
Container c = f.getContentPane(); // 获取窗体容器
c.setBackground(Color.WHITE); // 设置窗体颜色
JLabel l = new JLabel("这是一个标签");
c.add(l); // 添加组件
// c.remove(l); // 删除组件
c.validate( ); // 验证容器中的组件,使容器可以再次布置组件(刷新)
// f.setContentPane(c); // 窗体重新载入容器(刷新)
f.setResizable(false); // 设置窗体是否可以改变大小
System.out.println("x="+f.getX()+" y="+f.getY()); // 获取窗体的位置坐标
}
}
2. JDialog
package cn.edu.sdut.acm;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class Main extends JDialog {
public Main(JFrame jFrame){
/*
* 第一个参数,父窗体对象
* 第二个参数,对话框标题
* 第三个参数,是否阻塞父窗体
*/
super(jFrame, "对话框标题",true);
Container c = getContentPane(); // 获取窗体容器
c.add(new JLabel("这是一个标签"));
setBounds(100, 100, 100, 100);
}
public static void main(String[] args){
JFrame f = new JFrame("父窗体");
f.setBounds(50, 50, 300, 300);
Container c = f.getContentPane();
JButton btn = new JButton("弹出对话框");
c.setLayout(new FlowLayout()); // 设置布局,使用流布局
c.add(btn);
f.setVisible(true);
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
btn.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Main m = new Main(f);
m.setVisible(true); // 设置窗体可见
}
}); // 添加动作监听
}
}