Swing

**AWT **不是跨平台的,从外观到控制都依赖操作系统,是重型组件

**Swing **组件是用纯 java 实现的轻型(Lightweight)组件

​ 没有本地代码

​ 不依赖本地操作系统的支持

​ 在不同的操作系统表现一致

Swing 库是 AWT 库的扩展

Swing 组件类关系和顶层容器

Swing 组件类关系:

  • javax.swing 包提供数量众多的接口、类和组件

  • 所有的组件是从 JComponent 扩展出来的

窗口(Window)

  • Container 的子类

  • 有标题栏和相关控制按纽

  • 有边框

  • 可以添加菜单栏

  • 可以独立存在

  • 运行可以被移动,改变大小

  • 是顶层容器,不能包含在其他容器中

面板(Panel)

  • Container 子类

  • 没有标题,没有边框,不可添加菜单栏

  • 不能独立存在

  • 可以包含其他 panel

框架 Frame

  • Window 子类

  • 是一种窗口

  • 用于 JAVA Application 应用程序的主窗口,带有最大化、最小化和关闭控制按纽

对话框 Dialog

  • Window 子类

  • 也是一种窗口

  • 不能作为应用程序的主窗口,通常依附于一个框架

  • 没有最大化和最小化按纽

  • 有模式(Modal)窗口属性

  • 总在最前面

标签 Label

  • 用于显示字符串

文件行 TextField

  • 单行文本编辑框,用于输入一行文

按纽 Button

  • 显示执行命令

  • 执行特定操作

JPanel、JButton

  • JPanel 用来创建面板

  • JButton 用来创建按钮

package com.swing.ljb;

import java.awt.*;
import javax.swing.*;

public class Swing {
	public static void main(String[] args) {
		JFrame jf = new JFrame("第一个 Swing 窗口");//创建窗口
		jf.setSize(230, 80);//大小
		jf.setBackground(Color.WHITE);//背景颜色
		jf.setLocation(300, 200);//窗体大小
		Container pane = jf.getContentPane(); //创建面板
		JPanel panel=new JPanel();
		JButton send=new JButton("发送");//创建按钮
		JButton quit=new JButton("退出");
		//把 button 放置到 panel 上,把 panel 放置到 frame 上
		panel.add(send);//添加按钮
		panel.add(quit);
		pane.add(panel);
		jf.setVisible(true);
	}
}

常用的布局

一个图形用户界面上会有很多个组件,这些组件需要根据用户使用需求和习惯进行布局,API 中提供了几种常用的布局管理器来进行布局;

流布局管理器 FlowLayout

​ 组件按照从左到右,从上到下的方式依次布局;是 JPanel 的默认布局管理器;

边界布局管理器 BorderLayout

​ 将容器分为东西南北中五个区域,可以在指定区域放置组件;是 JFrame 的默认布局管理;

网格布局管理器 GridLayout,

​ 将容器分成等行等列的网格;

package com.swing.ljb;

import java.awt.*;
import javax.swing.*;

public class Swing {
	public static void main(String[] args) {
		// 创建 JFrame 对象
		JFrame frame = new JFrame("TestJFrame");
		// 获得内容面板容器
		Container pane = frame.getContentPane();
		// 创建 JPanel 对象
		JPanel panel = new JPanel();
		// 创建 JButton 对象
		JButton send = new JButton("发送");
		JButton quit = new JButton("退出");
		// 把 button 放置到 panel 上,把 panel 放置到 frame 上
		// 对 panel 设置流布局管理器
		panel.setLayout(new FlowLayout());
		// 把 button 放置到 panel 上,把 panel 放置到 frame 上
		panel.add(send);
		panel.add(quit);
		// 对 frame 设置布局管理
		frame.setLayout(new BorderLayout());
		JLabel label = new JLabel("聊天内容:");
		JTextField input = new JTextField();// 输入框
		JTextArea output = new JTextArea();// 文本域
		pane.add(label, "North"); // 北边 ->上边
		pane.add(input, "South"); // 南边 ->下边
		pane.add(output, "Center");// 中间
		pane.add(panel, "East");// 包含了 2 个按钮,东-> 右边
		// 设置大小及可见性
		frame.setSize(300, 200);
		frame.setVisible(true);
	}
}

GUI 事件与监听器

对于一个 GUI 来说,如果不进行事件处理,就是“又聋又哑”的,无法与用户进行交互;

Java Swing 中事件相关的类和接口都位于 java.awt.event 以及 javax.swing.event 中;

主要包括 XXXEvent 事件类,以及与事件类对应的监听器接口 XXXListener;

对 GUI 进行事件处理的基本步骤:

判断事件源组件以及事件类型

编写事件监听器类,实现相应的监听器接口

使用 addXXXListener 方法,对事件源组件进行事件监听注册

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐