java gui 案例_JAVA GUI 事件监听事件 详解 和 案例.

本文详细介绍了Java GUI中的AWT和Swing组件,强调了它们的重量级和轻量级特性。通过实例展示了如何创建图形用户界面,并探讨了事件监听机制,包括事件源、事件、监听器和事件处理。通过添加WindowListener和ActionListener,实现了窗口关闭和按钮点击的响应。同时,文章还涉及了文本框的KeyListener,用于限制输入为数字并处理键盘事件。
摘要由CSDN通过智能技术生成

GUI(图形用户界面)

Graphical User Interface(图形用户接口)

用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观.

CLI

Command Line User Interface(命令行用户接口)

就是常见的 Dos 命令行操作.

需要记忆一些常用的命令, 操作不直观.

Java 为 GUI 提供的 对象 都存在 java.awt 和 javax.swing 两个包中.

Java 图形化界面的 产品: eclipse 这个产品使用 纯Java 语言 编写的. 所以 这个 软件不用安装, 但是至少得有 jre(Java 语言程序的 运行环境).

1. AWT 和 Swing

*** java.awt: Abstarct Window ToolKit(抽象窗口工具包), 需要调用本地系统方法 实现功能. 属于 重量级(和系统耦合(嵌入) 紧密) 控件.

*** javax.swing: 在 AWT 的基础上, 建立的一套图形界面 系统, 其中提供了 更多的组件, 而且 完全由 Java 实现. 增强了 移植性, 属 轻量级(和系统耦合(嵌入) 较浅) 控件.

SWT外观包 网上可以下载, 开源免费, 值得一试.

component : 组件 container: 容器checkbox: 复选框.

TextField: 文本框: 单行文本框. TextArea: 文本区域: 多行文本框.

Panel: 面板, 一般 面板 不能独立存在, 都是 基于 Window(窗体) 的.

Frame: 小窗口.

Dialog: (弹出一个)对话框. FileDialog: 文件对话框.

*** Container: 为容器, 是一个特殊的组件, 该组件中 可以通过 add 方法 添加 其他 组件进来.

*** 一般先创建 一个 整体界面(new Frame) , 然后再 添加一些 子组件.

2. 事件 监听机制.

事件源(组件) (承载事件的源头)

事件(Event) (发生的事)

监听器(Listener) (监控 某些动作)

事件处理(引发事件后 处理方式)

* 需求: 想要 点击按钮 有效果, 比如 打印一句话.

*

* 思路:

*

* 1. 确定 事件源. 按钮.

*

* 2. 确定 监听器. 按钮添加监听器, 按钮对象 最清楚, 到 按钮对象中 查找.

*

* 3. 定义 处理方式.

*

* 定义的 规范: XXXLinstener: XXX监听器. --- 对应的 XXXEvent 事件.

// *** 补充: public abstarct class WindoAdapter{ } 就是 一个 典型的 没有抽象方法的 抽象类.

public abstract class WindoAdapter{ }

接收 窗口事件的 抽象适配器类。 此类中的方法为空。 此类 存在的目的 是 方便 创建 监听器对象。

这是一个 抽象类, 但是 其中的 方法都没被 抽象。(没有抽象方法的 抽象类。)

*** Alt + Shift + s 调用 源码 命令。

需求: 想要实现 点击 窗体的 X 就可以实现 窗体的 关闭。

*

* 1. 事件源: 窗体。

*

* 2. 确定 监听器。 通过 窗口对象 去查。

*

* 3. 事件处理。

*

* 到底 哪些 监听接口 , 有 适配类?

*

* 只要 监听 接口中的 方法 不大于 2 个(在 两个以内) 都没有 适配器类。 适配器的 出现 只为 方便 创建 监听器 对象。

*

*

* 但是 一般 监听接口 都有 适配器。

// *** Frame 本身是一个容器, 但是它 里面 其实是封装了 一个 集合; 这些组件 都是一个个 对象, 然后 就添加到了 集合中去。

f.addWindowListener(new WindowAdapter(){// *** 这里 是个 大括号, 说明 里面是个 匿名的 内部类。 实现方法。

System.exit(0); // *** 退出 java 虚拟机。

需求: 想要用户点击 有效果, 比如 打印一句话。

*

* 思路:

* 1. 确定事件源 (按钮)

*

* 2. 确定 监听器。 (按钮添加监听器, 按钮对象最清楚, 到按钮对象中查找。)

*

* 3. 定义处理方式。

*

* 定义的 规范:XXXListener 监听器 XXX监听器 --对应的 XXXEvent 事件。

*

* */

/*

// *** 1. 在 按钮上 添加所需的 监听器

but.addActionListener(new ActionListener(){ // *** 使用 匿名内部类 直接 实现 接口中的 方法。

1 importjava.awt.Button;2 importjava.awt.FlowLayout;3 importjava.awt.Frame;4 importjava.awt.TextField;5 importjava.awt.event.KeyAdapter;6 importjava.awt.event.KeyEvent;7 importjava.awt.event.MouseAdapter;8 importjava.awt.event.MouseEvent;9 importjava.awt.event.WindowAdapter;10 importjava.awt.event.WindowEvent;11

12 public classKeyLinstener {13

14 public static voidmain(String[] args) {15

16 Frame f = new Frame("My Frame");17

18 f.setSize(450,450);19

20 f.setLayout(newFlowLayout());21

22 f.setLocation(500, 200);23

24 f.setVisible(true);25

26

27 //*** 给窗口 添加 组件.

28

29 Button but = new Button("My Button");30

31

32 //*** 加入一个 文本框 组件.

33

34 TextField tf = new TextField(40); //*** 数值, 有多长.

35

36

37 f.add(tf);38

39 f.add(but);40

41

42 /*

43 *44 * 需求: 对鼠标 双击 进行 处理.45 *46 *47 *48 **/

49

50 but.addMouseListener(newMouseAdapter() {51

52 @Override53 public voidmouseClicked(MouseEvent e) {54

55

56 if(e.getClickCount() == 2) {57

58 System.out.println("Mouse Double Click");59

60

61 }62

63 }64

65 });66

67 /*

68 *69 * 需求: 文本框中 只能 输入 数字.70 *71 *72 * 事件源: 文本框.73 *74 * 文本框上 注册键盘 监听.75 *76 * 事件处理.77 *78 *79 * static getKeyText(); 根据 键盘的 码, 返回 对应的 文本.80 *81 **/

82

83

84 tf.addKeyListener(newKeyAdapter() {85

86 @Override87 public voidkeyPressed(KeyEvent e) {88

89

90 //*** 1. 如何 获取 录入的 内容, 通过 键盘事件 对象 获取.91

92 //*** ctrl shift alt 之类 的 都是 ? 号. 因为 这里 的 方法 只能 返回一个 字符.

93

94 /*char key = e.getKeyChar();95

96 int code = e.getKeyCode(); // *** 关联的 键盘码.97

98

99 // System.out.println(key + "......." + code);100

101 System.out.println(code + "......" + KeyEvent.getKeyText(code));*/

102

103

104 /*

105 int code = e.getKeyCode();106

107 if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)){108

109 System.out.println("必须是 0 ~ 9 数字");110

111 e.consume(); // *** 直接 取消 默认 处理方式.112

113 }*/

114

115 /*** 按 回车键 进入.116 if(e.getKeyCode() == KeyEvent.VK_ENTER ) {117

118 System.out.println("Enter run");119

120 }121 */

122

123 /*** 调用 父类 方法. e.isControlDown() 按住 ctrl + enter 进入.*/

124

125 if(e.isControlDown() && e.getKeyCode() ==KeyEvent.VK_ENTER) {126

127

128 System.out.println("ctrl + Enter run");129

130

131

132 }133

134

135 }136

137 });138

139

140 //*** 使 窗口上的 X 点击 可以进行关闭.

141 f.addWindowListener(newWindowAdapter() {142

143 @Override144 public voidwindowClosing(WindowEvent e) {145

146 System.exit(0);147

148 }149 });150 )151 }152

153

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值