JFrame窗体

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

JFrame类的常用构造方法有以下两种形式:

  • public JFrame():创建一个初始不可见、没有标题的新窗体;
  • public JFrame(String title):创建一个不可见但具有标题的窗体;

例如,创建一个JFrame窗体对象,代码如下:

JFrame jf = new JFrame("窗体");
Container container = jf.getContentPane();

上面代码在创建完JFrame对象后,使用getContentPane()方法创建了一个Container对象,这是因为Swing组件的窗体通常与组件和容器相关,所以在JFrame对象创建完成后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器,通常,这个容器用包含和显示组件,如果需要将组件添加至容器,可以使用来自Container类的add()方法进行操作,例如以下代码

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

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

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

创建完JFrame窗体之后,需要对窗体进行设置,比如设置窗体的位置、大小、是否可见等。这些操作通过JFrame类提供的相应方法来实现,下表中对JFrame类的常用方法进行讲解:

方法功能描述
setBounds(int x,int y,int width,int leight)设置组件左上角顶点的坐标为(x,y),宽度为width,高度为height
setLocation(int x,int y)设置组件的左上角坐标为(x,y)
setSize(int width,int leight)设置组件的宽度为width,高度为height

setVisibale(boolean b)

设置组件是否可见,参数为true表示可见,参数为false表示不可见
setDefaultCloseOperation(int operation)设置关闭JFrame窗体的方式,默认值为DISPOSE_ON_CLOSE

                              java为实现关闭JFrame窗体提供了多种方式,常用的有4种,如下:

DO_NOTHING_ON_CLOSE表示单击关闭按钮时无任何操作
DISPOSE_ON_CLOSE表示单击关闭按钮时隐藏并释放窗口
HIDE_ON_CLOSE表示单击关闭按钮时将当前窗口隐藏
EXIT_ON_CLOSE表示单击关闭按钮时退出当前窗口并关闭程序

实例:创建标签组件并添加到窗体中,代码如下:

import java.awt.*; //导入AWT包
import javax.swing.*; //导入Swing包


public class JFrameTest 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(200, 150); // 设置窗体大小
		// 设置窗体关闭方式
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String args[]) { // 在主方法中调用CreateJFrame()方法
		new JFrameTest().CreateJFrame("创建一个JFrame窗体");
	}
}

返回结果如下图:
 

如何让窗体不能改变大小呢?代码如下:

jf.setResizable(false);

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):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题,如果model为true,则弹出对话框之后,用户无法操作父窗体
  • public JDialog(Frame f,String title):创建一个指定标题和父窗体的对话框;
  • public JDialog(Frame f,String title,Boolean model):创建一个指定标题、窗体和模式的对话框;

下面来看一个实例,该实例主要实现单击JFrame窗体中的按钮后,弹出一个对话框窗体,代码如下:


import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

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 MyFrame() {
		Container container = getContentPane(); // 获得窗体容器
		container.setLayout(null); // 容器使用null布局
		JButton bl = new JButton("弹出对话框"); // 定义一个按钮
		bl.setBounds(10, 10, 100, 21); // 定义按钮在容器中的坐标和大小
		bl.addActionListener(new ActionListener() { // 为按钮添加点击事件
			public void actionPerformed(ActionEvent e) {
				// 创建MyJDialo对话框
				MyJDialog dialog = new MyJDialog(MyFrame.this);
				dialog.setVisible(true); // 使MyJDialog窗体可见
			}
		});
		container.add(bl); // 将按钮添加到容器中
		container.setBackground(Color.WHITE); // 容器背景色为白色
		setSize(200, 200); // 窗口大小
		// 窗口关闭后结束程序
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setVisible(true); // 使窗口可见
	}

	public static void main(String args[]) {
		new MyFrame(); // 实例化MyFrame类对象
	}
}

返回结果:
 

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐