窗体作为Swing应用程序中组件的承载体,处于非常重要的位置。Swing中常用的窗体包括JFrame和JDialog。
一、JFrame窗体
JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗体继承了JFrame类,所以它拥有“最大化”、“最小化”和“关闭”等按钮,语法格式如下:
JFrame jf = new JFrame(title);
Container container = jf.getContentPane();
//jf:JFrame类的对象
//container:Container类的对象,可以使用JFrame对象调用getContentPane()方法获取
Swing组件的窗体与组件和容器相关,所以在JFrame对象创建完成后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。可以使用Container类的add()方法来添加组件到容器,remove()方法来移除容器中的组件,相关示例如下:
import java.awt.*;
import javax.swing.*;
public class Example extends JFrame{ //定义一个类继承JFrame类
public void CreateJFrame(String title) { //定义一个CreateJFrame()方法
JFrame jf = new JFrame(title); //实例化一个JFrame对象
Container container = jf.getContentPane(); //获取一个容器
JLabel jl = new JLabel("这是一个JFrame窗体"); //创建一个JLabel标签
//使标签上的文字居中
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl); //将标签添加到容器种
container.setBackground(Color.white); //设置容器的背景颜色
jf.setVisible(true); //设置窗体可视
jf.setSize(400,300); //设置窗体大小
//设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String agrs[]) {
new Example().CreateJFrame("创建一个JFrame窗体");
}
}
运行结果:
创建窗体后,需要给予窗体一个关闭方式,可以调用setDefaultCloseOperation()方法关闭窗体,Java提供了多种关闭方式,常用的有以下四种:
1、DO_NOTHING_ON_CLOSE:什么都不做就将窗体关闭
2、DISPOSE_ON_CLOSE:任何注册监听程序对象后自动隐藏并释放窗体
3、HIDE_ON_CLOSE:隐藏窗口的默认窗口关闭
4、EXIT_ON_CLOSE:退出应用默认窗口关闭
二、JDialog窗体
JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的java.awt.DIalog类
JDialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样。JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后再容器种设置窗体的特性。
在应用程序种创建JDialog窗体需要实例化JDialog类,通常有以下几个JDialog类的构造方法:
1、public JDialog():创建一个没有标题和父窗口的对话框
2、public JDialog(Frame f):创建一个指定父窗口的对话框,但该窗体没有标题
3、public JDialog(Frame f,boolean model):创建一个指定类型的对话框,并指定父窗口,但该窗体没有指定标题
4、public JDialog(Frame f,String title):创建一个指定标题和父窗口的对话框
5、public JDialog(Frame f,String title,boolean model):创建一个指定标题、窗体和模式的对话框
示例如下:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class MyJDialog extends JDialog{ //创建心类继承JDialog类
public MyJDialog(MyFrame frame) {
//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
super(frame,"第一个JDialog窗体",true);
Container container = getContentPane(); //创建一个容器
container.add(new JLabel("这是一个对话框")); //在容器种添加标签
setBounds(120,120,100,100); //设置对话框窗体大小
}
}
public class MyFrame extends JFrame{
public static void main(String args[]) {
MyFrame jf = new MyFrame();
jf.setVisible(true); //设置窗体可视
jf.setSize(400,300); //设置窗体大小
//设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public MyFrame() {
Container container = getContentPane(); //创建一个容器
container.setLayout(null);
JLabel jl = new JLabel("这是一个JFrame窗体"); //在窗体种设置标签
container.add(jl);
JButton bl = new JButton("弹出对话框"); //定义一个按钮
bl.setBounds(10,10,100,21);
bl.addActionListener(new ActionListener() { //给按钮添加鼠标单击事件
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
new MyJDialog(MyFrame.this).setVisible(true);
}
});
container.add(bl); //将按钮添加到容器中
}
}
运行结果如下图所示: