Java Swing概述: JFrame窗体和JDialog窗体

GUI(图形用户界面)为程序员提供图形界面,它最初的设计目的死为了程序员构建一个通用的GUI,使其能够在所有的平台上运行,但是Java 1.0 中的基础类AWT(抽象窗口工具箱)并没有达到这个要求,于是Swing出现了,它是AWT组建的增强组建,但是它并不能完全替代AWT,这两种组件需要同时出现在一个图形用户界面中。

Swing组件

原来的AWT组件来自java.awt包,当含有AWT组件的java应用程序在不同的平台上执行时,每个平台的GUI组件的显示会有所不同,但是在不同的平台运行Swing开发的应用程序时,就可以统一GUI组件的显示风格,因为Swing组件允许编程人员在跨平台时指定统一的外观和风格。

Swing组件通常被称为“轻量级组件”,因为它完全由java语言编写,而Java时不依赖于操作系统的语言,它可在任何平台上运行;相反,依赖于本地平台的组件称为“重量级 组件”,如AWT组件就是依赖本地平台的窗口系统来决定组件的功能、外观和风格。Swing组件具有以下特点:

  • 轻量级组件

  • 可插入外观组件

 

Swing包

为了有效的使用Swing组件,必须了解Swing包的层次结构和继承关系,其中比较重要的是Component类、Container类和JComponent类。其中这几个类的继承关系如下:

javax.swing.JComponent 继承自:

    javax.awt.Container类继承自:

        javax.awt.Component继承自:

            java.lang.Object类

在Swing组件中大多数GUI组件都是Component类的直接子类或者间接子类,JComponent类是Swing组件各种特性的存放位置,这些组件的特性包括设定组件边界,GUI组件自动滚动等。

在Swing组件中最重要的是父类Container类,而Container类有两个重要的子类,分别为java.awt.Window and java.awt.Frame, 除了以往的AWT类组件会继承这两个类之外,现在的Swing组件也扩展了这两个类。

常用窗体

窗体作为Swing应用程序中的组件的承载体,处于非常重要的位置。Swing中常用的窗体包括JFrame和JDialog。

JFrame窗体

JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载着血Swing组件的容器。在开发应用程序时,可以通过继承java.swing.JFrame类创建一个窗体。在这个窗体中添加组件,同时为组件设置事件。

由于该窗体继承了JFrame类,所以它拥有“最大化”、“最小化”、和“关闭”等按钮

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

JFrame在程序中的语法如下:

JFrame jf = new JFrame(title);
Container container = jf.getContentPane();

参数含义如下:

jf:JFrame类对象

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

Swing组件的窗体通常与组件和容器有关,所以JFrame对象创建完成后,需要调用getContentPane() 方法将窗体转换为容器,然后在容器中添加组件或者设置布局管理器。

通常这个容器用来包含和显示组件。如果需要将组件添加至容器,可以使用来自Container类的add方法进行设置。例如:

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

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

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

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

package com.xsh;

import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class Example1 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);	//将标签位置设置为居中
		jl.setForeground(Color.white);	//设置JLabel的颜色
		container.add(jl);	//将标签添加到容器中
		container.setBackground(Color.RED);	//设置容器背景颜色
		jf.setVisible(true);	//是窗体可视
		jf.setSize(300, 150);	//设置窗体大小
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);	//设置窗体关闭方式
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Example1().CreateJFrame("这是我创建的第一个JFrame窗体。");	//主方法中调用JFrame()方法
	}
}

其运行结果如下:

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

  • public JFrame().

  • Public JFrame(String title).

JFrame类中的两种构造方法分别为无参的构造方法和有参的构造方法。

第一种形式的构造方法可以创建一个初始不可见、没有标题的新窗体;

第二种形式的构造方法在实例化该JFrame对象时可以创建一个不可见但是具有标题的窗体。

可以使用JFrame对象调用show()方法使窗体可见,但是该方法已经被系版本的JDK中的setVisible(true)方法取代。

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

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

  • DO_NOTHING_ON_CLOSE

  • DISPOSE_ON_CLOSE)

  • HIDE_ON_CLOSE

  • EXIT_ON_CLOSE

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):创建一个指定标题,父窗体和模式的对话框

下面来看一个实例:

package com.xsh;

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.SwingConstants;
import javax.swing.WindowConstants;

class MyDialog extends JDialog{		

	private static final long serialVersionUID = 1L;
	
	public MyDialog(MyFrame frame) {		
		super(frame,"第一个JDialog窗体", true);	//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
		Container container = getContentPane();	//创建一个容器
		container.add(new JLabel("这是一个JDialog对话框"));	//在容器中添加标签
		setBounds(100, 100, 200, 100);	//设置容器的窗体大小,其中前两个值是设置对话框的位置,后两个值是设置对话框的大小
	}
}

public class MyFrame extends JFrame {	//创建新类,继承自JFrame
	private  static final long serialVersionUID = 1L;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyFrame();	//实例化MyFrame对象
	}
	public MyFrame() {
		Container container = getContentPane();	//创建一个容器
		container.setLayout(null);
		JLabel jl = new JLabel("这是一个JFrame窗体");	//在窗体中设置标签
		jl.setHorizontalAlignment(SwingConstants.CENTER);	//将标签的文字至于标签中间的位置 
		container.add(jl);	//将标签添加到容器中
		JButton jb = new JButton("弹出对话框");	//定义一个按钮
		jb.setBounds(10, 30, 100, 20);	//设置按钮的大小
		jb.addActionListener(new ActionListener() {	//为按钮添加点击事件

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				new MyDialog(MyFrame.this).setVisible(true);	//使MyDialog窗体可见
				//在点击事件中,完成了对话框的创建
			}		
		});
		container.add(jb);
		container.setBackground(Color.white);
		setSize(200,200);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setVisible(true);	
	}
}

在本实例中,为了使对话框父窗体弹出,定义了一个JFrame窗体,首先在该窗体中定义了一个按钮,然后为此按钮添加了一个点击事件。在点击事件中,我们使用了new MyJDialog().setVisible(true) 语句使对话框窗体可见,这样就实现了单机 按钮之后弹出 对话框的功能。

在MyDialog类中,由于它继承了JDialog类,所以可以在构造方法中使用super关键字调用JDialog构造方法。

在这里我们使用了 piublic JDialog(Frame f, String title, boolean model); 这种形式的构造方法,相应的设置了自定义的JFrame窗体以及对话框的标题和窗体类型。

 

猜你喜欢

转载自blog.csdn.net/weixin_42545594/article/details/82314768