Swing常用窗体,JFrame及JDialog窗体

窗体作为Swing应用程序中组件的承载体,处于非常重要的位置。 Swing中常用的窗体包括JFrame和JDialog,本节将着重讲解这两个窗体 的使用方法。

JFrame窗体

JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以 将JFrame看作是承载这些Swing组件的容器。在开发应用程序时可以通 过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同 时为组件设置事件。由于该窗体继承了JFrame类,所以它拥有“最大 化”“最小化”“关闭”等按钮。

下面将详细讲解JFrame窗体在Java应用程序中的使用方法。

JFrame在程序中的语法格式如下:

语法
  • jf:JFrame类的对象。
  • container:Container类的对象,可以使用JFrame对象调用 getContentPane()方法获取。

读者大致应该有这样一个概念,Swing组件的窗体通常与组件和容 器相关,所以在JFrame对象创建完成后,需要调用getContentPane()方法 将窗体转换为容器,然后在容器中添加组件或设置布局管理器。通常, 这个容器用来包含和显示组件。如果需要将组件添加至容器,可以使用 来自Container类的add()方法进行设置。例如:

container.add(new JButton("按钮")); //JButton按钮组件

在容器中添加组件后,也可以使用Container类的remove()方法将这 些组件从容器中删除。例如:

container.remove(new JButton("按钮"));

下面的实例中实现了JFrame对象创建一个窗体,并在其中添加一个组件。

【例】在项目中创建Example1类,该类继承JFrame类成为窗体类,在该类中创建标签组件,并添加到窗体界面中。

import java.awt.*;

import javax.swing.*;

public class Example1 extends JFrame {
	private static final long serialVersionUID = 1L;

// 定义一个类继承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(200, 150); // 设置窗体大小
		// 设置窗体关闭方式
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String args[]){//在主方法中调用createJFrame()方法
		new Example1().CreateJFrame("创建一个JFrame窗体");
	}
}
创建JFrame窗体
创建JFrame窗体

在例子中,Example1类继承了JFrame类,在CreateJFrame()方法中 实例化JFrame对象。JFrame类的常用构造方法包括以下两种形式:

  • public JFrame()。
  • public JFrame(String title)。

JFrame类中的两种构造方法分别为无参的构造方法与有参的构造方法,第1种形式的构造方法可以创建一个初始不可见、没有标题的新窗体;第2种形式的构造方法在实例化该JFrame对象时可以创建一个不可 见但具有标题的窗体。可以使用JFrame对象调用show()方法使窗体可见,但是该方法早已被新版JDK所弃用,通常使用setVisible(true)方法使 窗体可见。

同时可以使用setSize(int x,int y)方法设置窗体大小,其中x与y变量 分别代表窗体的宽与高。

创建窗体后,需要给予窗体一个关闭方式,可以调用 setDefaultCloseOperation()方法关闭窗体。Java为窗体关闭提供了多种方 式,常用的有以下4种:

  • DO_NOTHING_ON_CLOSE。
  • DISPOSE_ON_CLOSE。
  • HIDE_ON_CLOSE。
  • EXIT_ON_CLOSE。

这几种操作实质上是将一个int类型的常量封装在 javax.swing.WindowConstants接口中。

第1种窗体退出方式代表什么都不做就将窗体关闭;第2种退出方式 则代表任何注册监听程序对象后会自动隐藏并释放窗体;第3种方式表 示隐藏窗口的默认窗口关闭;第4种退出方式表示退出应用程序默认窗口关闭。

JDialog窗体

JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的 java.awt.Dialog类。

JDialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用 IE浏览器时弹出的确定对话框一样。JDialog窗体实质上就是另一种类型 的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方 法将窗体转换为容器,然后在容器中设置窗体的特性。

在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用以 下几个JDialog类的构造方法。

  • public JDialog():创建一个没有标题和父窗体的对话框。
  • public JDialog(Frame f):创建一个指定父窗体的对话框,但该窗 体没有标题。
  • public JDialog(Frame f,boolean model):创建一个指定类型的对话 框,并指定父窗体,但该窗体没有指定标题。
  • public JDialog(Frame f,String title):创建一个指定标题和父窗体的 对话框。
  • public JDialog(Frame f,String title,boolean model):创建一个指定标 题、窗体和模式的对话框。

【例】在项目中创建MyJDialog类,该类继承JDialog窗体,并 在窗口中添加按钮,当用户单击该按钮后,将弹出一个对话框窗体。本 实例关键代码如下:

package com.lzw;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

class MyJDialog extends JDialog { // 创建新类继承JDialog类

	private static final long serialVersionUID = 1L;

	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 { // 创建新类

	private static final long serialVersionUID = 1L;

	public static void main(String args[]) {
		new MyFrame(); // 实例化MyJDialog类对象
	}
	
	public MyFrame() {
		Container container = getContentPane(); // 创建一个容器
		container.setLayout(null);
		JLabel jl = new JLabel("这是一个JFrame窗体"); // 在窗体中设置标签
		// 将标签的文字置于标签中间位置
		jl.setHorizontalAlignment(SwingConstants.CENTER);
		container.add(jl);
		JButton bl = new JButton("弹出对话框"); // 定义一个按钮
		bl.setBounds(10, 10, 100, 21);
		bl.addActionListener(new ActionListener() { // 为按钮添加鼠标单击事件
					public void actionPerformed(ActionEvent e) {
						// 使MyJDialog窗体可见
						new MyJDialog(MyFrame.this).setVisible(true);
					}
				});
		container.add(bl); // 将按钮添加到容器中
		
		container.add(bl);
		container.setBackground(Color.white);
		setSize(200, 200);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setVisible(true);
	}
}
弹出JDialog窗体
弹出JDialog窗体

在本实例中,为了使对话框在父窗体弹出,定义了一个JFrame窗 体,首先在该窗体中定义一个按钮,然后为此按钮添加一个鼠标单击监 听事件(在这里使用了匿名内部类的形式,如果读者对这部分的代码实 现有疑问,不妨回顾一下第11章中该部分的内容,而监听事件会在后续 章节中进行讲解,在这里读者只需知道这部分代码是当用户单击该按钮后实现的某种功能即可),这里使用new MyJDialog().setVisible(true)语 句使对话框窗体可见,这样就实现了用户单击该按钮后弹出对话框的功 能。

在MyJDialog类中,由于它继承了JDialog类,所以可以在构造方法 中使用super关键字调用JDialog构造方法。在这里使用了public JDialog(Frame f,String title,boolean model)这种形式的构造方法,相应地 设置了自定义的JFrame窗体以及对话框的标题和窗体类型。

在本实例代码中可以看到,JDialog窗体与JFrame窗体形式基本相 同,甚至在设置窗体的特性时调用的方法名称都基本相同,如设置窗体 大小、窗体关闭状态等。

发表评论