亲宝软件园·资讯

展开

Java Swing知识总结 Java Swing最详细基础知识总结

纪文啊! 人气:1
想了解Java Swing最详细基础知识总结的相关内容吗,纪文啊!在本文为您仔细讲解Java Swing知识总结的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java,Swing知识总结,Java,Swing,下面大家一起来学习吧。

一、简介

Swing 是一个为Java设计的GUI工具包。

Swing是JAVA基础类的一部分。

Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。

Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

二、Swing 组件的层次结构

从上图可以看出各组件之间的继承关系,我们可以看到Container类下面有四个子类,这四个子类中,除了JComponent类以外,其余三个都是Java AWT包中的类,而JComponent是Java Swing所出现的类。Sun公司在设计Java Swing时用JComponent把容器和组件之间由Java AWT过渡到Java Swing,也就是说大部分Java Swing中的容器和组件都继承JComponent类。

Container类除了JComponent类之外,其余三个都是Java AWT中的容器,需要注意的是容器又分为顶级容器和中间容器。顶级容器是指图形界面最外层的容器,如窗口(Window)。中间容器是指存放在顶级容器或者中间容器中的一种容器,如面板(Panel)。在实际编程中,要开发一个界面应该是这样的,顶级容器在最外面(JFrame),其次是中间容器,放在窗体上(JPanel),最后是基本组件,放在中间容器上。这里需要注意的是,容器中除了可以存放基本组件外,还可以存放容器,如图所示:

我们经常使用的顶级容器是窗体(JFrame)和对话框(JDialog),使用的中间容器是面板(JPanel)。开发中经常使用的基本组件大部分用JComponent类下的子类。

Component类的主要方法有:

(1) void enable():使组件可用。

(2) void disable(): 使组件不可用

(3) void show():  显示组件

(4) void paint(): 绘制图形

(5) void repaint(): 刷新

Container类的主要方法有:

(1) void add(Component c):将指定组件加入到容器中。

(2) void setLayout(): 设置布局管理器。

所有的包含组件都可继承或重载以上方法。

三、Swing组件

常用的Swing组件如下表所示: 

组件名称 定义
JButton 代表Swing按钮,按钮可用带一些图片或文字
JCheckBox 代表Swing中的复选框组件
JComBox 代表下拉列表框,可以在下拉显示区域显示多个选项
JFrame 代表Swing的框架类
JDialog 代表Swing版本的对话框
JLabel 代表Swing中的标签组件
JRadioButton 代表Swing的单选按钮
JList 代表能够在用户界面中显示一系列条目的组件
JTextField 代表文本框
JPasswordField 代表密码框
JTextArea 代表Swing中的文本区域
JOptionPane 代表Swing中的一些对话框

3.1 JFrame窗体组件

JFrame是独立于浏览器的可独立运行的主窗口,通常用于开发桌面应用程序/JFrame具有边界和标题栏设置,其大小可以调整。JFrame中需要加入组件,也可以加入菜单,或在上面绘图。

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

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

jf:JFrame类的对象

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

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

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

下面我们就用Java代码做一个简单的窗体,如下所示:

package xmsj;
 
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 test1 {
	public static void main(String[] args){
		//创建一个窗体对象
		JFrame jf=new JFrame("这是一个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);
	}
 
}

显示如下图所示:

上面的程序展示了如何创建一个简单的窗体,JFrame还有其想对应的方法,如下所示:

JFrame组件中提供了如下两个常用的构造方法:

(1)JFrame():创建一个没有窗口标题的窗口框架。

(2)JFrame(String):创建一个指定窗口标题的窗口框架。

JFrame的主要方法如下表所示:

方法 功能
addNotify() 创建一个对等的Frame
dispose() 清楚窗口对象
getIconImage() 获得窗口的图标
getMenuBar() 获得窗口的菜单栏
getTitle() 获取窗口的标题
paramString() 返回窗口的参数字符串
isResizable() 如果窗口大小可变,则返回真值
remove(MenuComponent) 从窗口中去掉指定的菜单栏
setIconImage(Image) 设置窗口的图标

3.2 JDialog窗体组件

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

对话框(JDialog)与框架(JFrame)有一些相似,但它一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。

所以,在对话框中一般不需要菜单条,也不需要改变窗口大小。此外,在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭。

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

(1)public JDialog():创建一个没有标题和父窗体的对话框

  (2)   public JDialog(Frame f): 创建一个指定父窗体的对话框,但该窗体没有标题

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

(4)public JDialog(Frame f,String titl):创建一个指定标题的父窗体的对话框

(5)public JDialog(Frame f,String title,boolean model):创建一个指定标题、窗体和模式的对话框

下面我们用代码来实现:

package njci.software.MyNotePad2018;
 
import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class ConfigDialog extends JDialog {
 
	/**
	 * 
	 */
	private static final long serialVersionUID = -713398359834685238L;
	public ConfigDialog(JFrame frame){
		super(frame,"这是一个对话框",true);
		//Container container=getContentPane(); //创建一个容器
		//container.add(new JLabel("这是一个对话框")); //在容器中添加标签
		//添加内部控件
		JPanel pnlConfig=new JPanel();
		pnlConfig.setLayout(null);
		JLabel lblWidth=new JLabel("宽度");
		JLabel lblHeight=new JLabel("高度");
		final JTextField txtWidth=new JTextField();
		final JTextField txtHeight=new JTextField();
		JButton btnSave=new JButton("保存");
		JButton btnCancel=new JButton("取消");
		
		//进行布局
		
		lblWidth.setBounds(50,30,60,40);
		txtWidth.setBounds(150,30,160,40);
		lblHeight.setBounds(50,100,60,40);
		txtHeight.setBounds(150,100,160,40);
		btnSave.setBounds(50,160,100,40);
		btnCancel.setBounds(200,160,100,40);
		pnlConfig.add(lblWidth);
		pnlConfig.add(txtWidth);
		pnlConfig.add(lblHeight);
		pnlConfig.add(txtHeight);
		pnlConfig.add(btnSave);
		pnlConfig.add(btnCancel);
		this.add(pnlConfig);
		this.setSize(400,320);
		this.setResizable(false);//窗体大小不可改变
		this.setLocationRelativeTo(frame);;//居中显示
		
	}
 
}
package javaswing;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class MyFrame extends JFrame {
	private static final long serialVersionUID = 4232937812480671357L;
	public MyFrame(){
		final JFrame frmMain=new JFrame("我的第一个记事本");
		frmMain.setSize(400,300);
		frmMain.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		frmMain.setLocationRelativeTo(null);  //居中显示
		frmMain.setVisible(true);
		ConfigDialog dlgConfig=new ConfigDialog(frmMain);
		dlgConfig.setVisible(true);
		
		
		
		
	}
 
	/**
	 * 
	 */
	
	
public static void main(String[] args){
	new MyFrame();
	
}
}

运行效果如下所示:

3.3 JLabel组件

在Swing中显示文本或提示信息的方法是使用标题,它支持文本字符串和图标。在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些组件的目的,所以标签在Swing中是比较常用的组件。

标签由JLabel类定义,它的父类为JComponent类。

JLabel组件显示的是静态文本或者图片,在通常情况下是不能编辑的,只起到提示的作用。观察QQ登录界面输入框左侧的头像,他就可以用JLabel组件实现。

JLabel组件中主要的构造方法如下:

(1)JLabel():创建空的标签。

(2)JLabel(String):创建一个带初始字符串的标签。

(3)JLabel(Icon):创建一个带有指定图像的标签。

JLabel的主要方法见下表所示:

方法 功能
setText(String) 设置显示内容
getText() 获取显示内容
getAlignment() 获取对齐方式
setAlignment() 设置对齐fang

3.4 文本域

文本域一般用来让用户输入姓名、信用卡号这样的信息,它是一个能够接收用户的键盘输入的小块区域。

在创建文本域时,参数类型有四种:空的、空的并且具有指定长度、带有初始文本内容和带有初始文本内容并具有指定长度的。

文本域的主要方法如下所示:

方法 功能
getColumns() 返回文本域的列数
getEchoChar() 返回用于回显的字符
setEchoCharacter(Char) 设置文本域的回显字符
setEditable(Boolean) 设置文本域是否为只读状态
setText(String) 设置文本域中的文本值
getText() 返回文本域中的输入文本值

3.5 按钮

几乎所有的交互式程序中都会有按钮,它是一种交互能力强且交互方便的控件,这个组件提供了“按下并动作”的基本用户界面。

构造方法如下:

(1):JButton():建立一个没有标示字符串的新按钮类对象。

(2):JButton(String label):建立一个标示字符串为label的新按钮类对象。

下面通过代码实现:

package javaswing;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class MyFrame extends JFrame {
	private static final long serialVersionUID = 4232937812480671357L;
	public MyFrame(){
		final JFrame frmMain=new JFrame("我的第一个记事本");
		frmMain.setSize(400,300);
		frmMain.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		frmMain.setLocationRelativeTo(null);  //居中显示
		frmMain.setVisible(true);
		//为按钮添加一个单机事件
		JButton jbn=new JButton("系统配置");
		frmMain.add(jbn);
		
		
		
	}
 
	/**
	 * 
	 */
	
	
public static void main(String[] args){
	new MyFrame();
	
}
}

运行效果如下所示:

四.布局管理器

在Swing中,每个组件在容器中都有一个具体位置和大小,而在容器中摆放各种组件时很难判断其具体位置和大小。布局管理器提供了Swing组件安排、展示在容器中的方法及基本的布局功能。使用布局管理器较程序员直接在容器中控制Swing组件的位置和大小方便得多,可以有效地处理整个窗体的布局。Swing提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。本节将探讨Swing中常用的布局管理器。

4.1 绝对布局

在Swing中,除了使用布局管理器之外还可以使用绝对布局。绝对布局,就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。

(1)使用Container.setLayout(null)方法取消布局管理器

(2)  使用Component.setBounds()方法设置每个组件的大小与位置。

下面我们用代码实现绝对布局:

package javaswing;
 
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class ConfigDialog extends JDialog {
 
	/**
	 * 
	 */
	private static final long serialVersionUID = -713398359834685238L;
	public ConfigDialog(JFrame frame){
		super(frame,"这是一个对话框",true);
		//Container container=getContentPane(); //创建一个容器
		//container.add(new JLabel("这是一个对话框")); //在容器中添加标签
		//添加内部控件
		JPanel pnlConfig=new JPanel();
		pnlConfig.setLayout(null);
		JLabel lblWidth=new JLabel("宽度");
		JLabel lblHeight=new JLabel("高度");
		final JTextField txtWidth=new JTextField();
		final JTextField txtHeight=new JTextField();
		JButton btnSave=new JButton("保存");
		JButton btnCancel=new JButton("取消");
		
		//进行绝对布局
		
		lblWidth.setBounds(50,30,60,40);
		txtWidth.setBounds(150,30,160,40);
		lblHeight.setBounds(50,100,60,40);
		txtHeight.setBounds(150,100,160,40);
		btnSave.setBounds(50,160,100,40);
		btnCancel.setBounds(200,160,100,40);
		pnlConfig.add(lblWidth);
		pnlConfig.add(txtWidth);
		pnlConfig.add(lblHeight);
		pnlConfig.add(txtHeight);
		pnlConfig.add(btnSave);
		pnlConfig.add(btnCancel);
		this.add(pnlConfig);
		this.setSize(400,320);
		this.setResizable(false);//窗体大小不可改变
		this.setLocationRelativeTo(frame);;//居中显示
		
	}
 
 
	public static void main(String[] args) {
		//new ConfigDialog(frame);
 
	}
 
}

4.2 流布局管理器

流布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像“流”一样从左到右摆放组件,知道占据了这一行的所有空间,然后再向下移动一行。默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。

FlowLayout布局管理器是一种最简单的布局管理方法,是JPanel的默认布局。它以流式的方式,自左向右,自上而下地放置容器中的组件,即组件按每行先后自左向右放置,一行放不下时换行。FlowLayout的默认对齐方式为居中对齐,也可以手工设置为左对齐或右对齐。

FlowLayout中常用的构造方法:

(1)FlowLayout():创建默认的FlowLayout布局管理器。

(2)FlowLayout(int):以指定的对齐方式创建FlowLayout布局管理器。其中参数:

FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)、FlowLayout.CENTER(居中对齐)。

(3)FlowLayout(int,int,int);以指定的对齐方式及间距创建FlowLayout布局管理器。其中,第一个参数为对齐方式,第二个参数为组件间以及组件与容器边之间的水平距离,第三个参数为组件之间以及组件与容器边之间的垂直间距。

FlowLayout的主要方法如下表所示:

方法 功能
getAlignment() 返回对齐方式
getHgap() 返回组件水平间距或返回组件列间距
getVgap() 返回组件垂直间距或返回组件行间距
setAlignment 设置对齐方式
setHgap() 设置组件列间距
setVgap() 设置行间距

下面通过代码实现FlowLayout的用法:

package javaswing;
 
import java.awt.Container;
import java.awt.FlowLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
 
public class FlowLayoutDemo extends JFrame{
	public FlowLayoutDemo(){
		setTitle("本窗体使用流布局管理器");      //设置窗体标题
		Container c=getContentPane();
		//设置窗体使用流布局管理器,使组件右对齐,并且设置组件之间的水平间隔与垂直间隔
		setLayout(new FlowLayout(2,10,10));
		for(int i=0;i<10;i++){
			c.add(new JButton("按钮"+i));
		}
		setSize(300,200);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		new FlowLayoutDemo();
 
	}
	}

运行效果如下图所示:

4.3 网格布局管理器

GridLayout布局管理器将容器区域划分成m行m列,即一个个大小相等的格子,而容器中的组件就放入这些格子中,占用大小完全相同的一格。

GridLayout的创建方法如下:

(1)GridLayout():创建默认的GridLayout布局,所有组件在一行中显示。

(2)GridLayout(int,int)按指定行数和列数创建GridLayout布局。

(3)Gridlayout(int,int,int)按指定行数、列数、行间距和列间距创建GridLayout布局。

GridLayout的主要方法如下表所示:

方法 功能
getHgap() 返回组件水平间距
getVgap() 返回组件垂直间距
setHgap() 设置组件水平间距
setVgap() 设置组件垂直间距
getRows() 获取网格的行数
getColumns() 获取网格的列数
setRows() 设置网格的行数
setColumns() 设置网格的列数

向网格中加入组件有两种方法:一种采用默认顺序,即从左向右、自上而下的顺序;另一种是加入时指明网格位置。

具体代码实现如下:

package javaswing;
 
import java.awt.Container;
import java.awt.GridLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
 
public class GridLayoutPosition extends JFrame{
	public GridLayoutPosition(){
		Container c=getContentPane();
		//设置容器使用网络布局管理器,设置7行3列的网格,行间距为5,列间距为5
		setLayout(new GridLayout(7,3,5,5));
		for(int i=0;i<20;i++){
			c.add(new JButton("按钮"+i)); //循环添加按钮
		}
		setSize(300,300);
		setTitle("这是一个使用网格布局管理器的窗体");
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args){
		new GridLayoutPosition();
	}
 
}

运行效果如下所示:

4.4 边界布局管理器

在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器,边界布局器可以将容器划分为东、南、西、北、中五个区域,可以将组件加入到这5个区域中。容器调用Container类的add()方法添加组件时可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来决定,这些成员变量的具体含义如下表所示:

成员变量 含义
BorderLayout.NORTH 在容器中添加组件时,组件置于顶端
BorderLayout.SOUTH 在容器中添加组件时,组件置于底端
BorderLayout.EAST 在容器中添加组件时,组件置于右端
BorderLayout.WEST 在容器中添加组件时,组件置于左端
BorderLayout.CENTER 在容器中添加组件时,组件置于中间开始填充,直到与其他组件边界连接

下面用代码实现:

package javaswing;
 
import java.awt.BorderLayout;
import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
 
public class BorderLayoutPosition extends JFrame{
	//定义组件摆放位置的数组
	String[] border={BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST};
	String[] buttonName={"center button","north button","south button","west button","east button"};
	public BorderLayoutPosition(){
		setTitle("这个窗体使用边界布局管理器");
		Container c=getContentPane(); //定义一个容器
		setLayout(new BorderLayout());  //设置容器为边界布局管理器
		for(int i=0;i<border.length;i++){
			//在容器中添加按钮,并设置按钮布局
			c.add(border[i],new JButton(buttonName[i]));
		}
		setSize(350,250); //设置窗体大小
		setVisible(true);  //设置窗体可见
		//设置窗体关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}
	public static void main(String[] args){
		new BorderLayoutPosition();
	}
	
 
}

实现效果如下图所示:

加载全部内容

相关教程
猜你喜欢
用户评论