目录
Swing 概述
GUI (图形用户界面)为程序提供图形界面,他最初的设计目的是为程序员构建一个通用的 GUI,使其能够在所有的平台上运行,但 Java 1.0 中基础类 AWT (抽象窗口工具箱)并没有达到这个要求,于是 Swing 出现了,它是 AWT 组件的增强组件,但是它并不能完全代替 AWT 组件,这两种组件需要同时出现在一个图形用户界面中。
Swing 特点
- 轻量级组件。
- 可插入外观组件。
Swing 包
在 Swing 组件中最重要的父类是 Container 类,而 Container 类有两个最重要的子类,分别为 java.awt.Window 与 java.awt.Frame。Swing组件也扩展了这两个类。
javax.swing.JComponent 顶层父类是 java.awt.Component 类与 java.awt.Container 类。
常用的 Swing 组件概述
组件名称 | 定义 |
---|---|
JButton | 代表 Swing 按钮,按钮可以带一些图片或文字 |
JCheckBox | 代表 Swing 中的复选框组件 |
JComBox | 代表下拉列表框,可以在下拉显示区域现实多个选项 |
JFrame | 代表 Swing 的框架类 |
JDialog | 代表 Swing 版本的对话框 |
JLabel | 代表 Swing 中的标签组件 |
JRadioButton | 代表 Swing 中的单选按钮 |
JList | 代表能够在用户界面中显示一系列条目的组件 |
JTextField | 代表文本框 |
JPasswordField | 代表密码框 |
JTextArea | 代表 Swing中的文本区域 |
JOptionpane | 代表 Swing中的一些对话框 |
常用窗体
JFrame 窗体
JFrame 窗体是一个容器,他是 Swing 程序各个组件的载体,可以将 JFrame 看作是承载这些 Swing 组件的容器。在开发应用程序时可以通过继承 java.swing.JFrame 类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗体继承了 JFrame 类,所以它拥有“最大化”“最小化”“关闭”等按钮。
package Test;
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame{
public void CreateJFrame(String titile) {
JFrame jf = new JFrame(titile); //用带参数构造方法创建一个JFrame窗体对象
Container container = jf.getContentPane(); //用 JFrame 对象调用 getContentPane()方法得到 Container 类对象
JLabel jl = new JLabel("这是一个 JFrame 窗体");
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl); //将标签添加到容器当中
container.setBackground(Color.white); //设置容器的背景颜色
jf.setVisible(true); //使窗体可视
jf.setSize(200, 100); //设置窗体大小
//设置窗体默认的关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
//在主方法中调用 CreateJFrame()方法
new Test().CreateJFrame("创建一个 JFrame 窗体");
}
}
JFrame 类的常用构造方法有以下两种形式:
- public JFrame()。
- public JFrame(String title)。
第 1 种形式的构造方法可以创建一个初始不可见、没有标题的新窗体;第 2 中形式的构造方法在实例化该 JFrame 对象时可以创建一个不可见但具有标题的窗体。可以使用 JFrame 对象调用 setVisible() 方法使窗体可见。
同时可以使用 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 接口中。
第一种窗体退出方式表示什么都不做就讲窗体关闭;第二种退出方式则代表任何注册监听程序对象后会自动隐藏并释放窗体;第三种方式表示隐藏窗口的默认窗口关闭;第四种方式表示推出应用程序默认窗口关闭。
JDialog 窗体
JDialog 窗体是 Swing 组件中的对话框,它继承了 AWT 组件中的 java.awt.Dialog 类。
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,bolean model):创建一个指定标题、窗体和模式的对话框。
package Test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyJDialog extends JDialog{
public MyJDialog(MyFrame frame) {
//实例化一个 JDialog 类对象,指定对话框的父窗体、窗体标题和类型
super(frame,"第一个 JDialog 窗体",true);
Container container = getContentPane(); //创建一个容器
container.add(new Label("这是一个对话框")); //在容器中添加标签
setBounds(120,120,100,100); //设置对话框窗体大小
}
}
public class MyFrame extends JFrame{
public static void main(String args[]) {
new MyFrame();
}
public MyFrame(){
JFrame jf = new JFrame("父窗体"); //创建窗体对象
Container container = jf.getContentPane(); //用窗体对象调用方法 getContentPane() 得到 Container 类对象
container.setLayout(null);
JButton bl = new JButton("弹出对话框"); //定义一个按钮
bl.setBounds(10,10,100,21);
bl.addActionListener(new ActionListener(){
//用内部类的形式提供ActionListener一个对象的引用
public void actionPerformed(ActionEvent e) {
//使 MyJDialog 可见
new MyJDialog(MyFrame.this).setVisible(true);
}
});
container.add(bl);
container.setBackground(Color.white);
jf.setVisible(true); //使窗体可视
jf.setSize(200,150); //设置窗体大小
//设置窗体默认关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
标签组件与图标
标签由 JLabel 类定义,它的父类为 JComponent 类。
标签可以显示一行只读文本、一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单地显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式。
JLabel 类提供了多种构造方法,可以创建多种标签、只有图标的标签或包含文本与图标的标签。JLabel 类常用的几个构造方法如下。
- public JLabel(): 创建一个不带图标和文本的 JLabel 对象。
- public JLabel(Icon icon):创建一个带图标的 JLabel 对象。
- public JLabel(Icon icon, int alignment):创建一个带图标的 JLabel 对象,并设置图标水平对齐方式。
- public JLabel(String text, int alignment):创建一个带文本的 JLabel 对象,并设置文字水平对齐方式。
- public JLabel(String text, Icon icon, int alignment):创建一个带文本、带图标的 JLabel 对象,并设置标签内容的水平对齐方式。
图标的使用
Swing 中图标可以放置在按钮、标签等组件上,用于描述组件的用途。图标可以用 Java 支持的图片文件类型进行创建,也可以使用 java.awt.Graphics 类提供的功能来创建。
在 Swing 中通过 Icon 接口来创建图标,可以在创建时给定图标的大小、颜色等特性。如果使用 Icon 接口,必须实现 Icon 接口中的 3 个方法:
- : public int getIconHeight()。
- : public int getIconWidth()。
- : public void paintIcon(Component arg0, Graphics arg1, int arg2,int arg3)。
getIconHeight()与getIconWidth()方法用于获取图标的长与宽,paintIcon()方法用于实现在指定坐标位置画图。
package Test;
import java.awt.*;
import javax.swing.*;
public class DrawIcon implements Icon{
int width = 0;
int height = 0;
public DrawIcon(int width,int height) {
this.width = width;
this.height = height;
}
//实现 paintIcon 方法
public void paintIcon(Component c, Graphics g, int x, int y) {
// 在指定位置绘制一个圆形
g.fillOval(x, y, getIconWidth(), getIconHeight());
}
public int getIconWidth()