java GUI之事件处理

常见事件及相应事件源类型

事件源 用户操作 事件
JButton 点击按钮 ActionEvent
JTextField  在文本域按回车键 ActionEvent
JCheckBox 点击复选框 ActionEvent,  ItemEvent
JRadioButton 点击单选按钮 ActionEvent,  ItemEvent
JComBox 选定选项 ActionEvent,  ItemEvent
JList 选定选项 ListSelectionEvent
JMenuItem 选定菜单项 ActionEvent,  ItemEvent
JSlider 滑动滑块 ChangeEvent
Window 窗口打开,关闭等 WindowEvent
Component 点击或移动鼠标 MouseEvent
Component 按下或释放键盘上的键 KeyEvent
Container 在容器中添加或删除组件 ContainerEvent
Component 组件获得或失去焦点 FocusEvent
Component 组件移动,改变大小 ComponentEvent
JScrollBar
移动滚动条

AdjustmentEvent

java事件处理机制使用的是事件委托处理模型.事件监听器并不会自动接收某个组件触发的事件,要想监听器接收某个组件触发的某种事件,

就必须在该事件源中注册它(因此,程序可以有选择的忽略事件).所谓注册就是调用事件源提供的注册方法来声明某个对象是该事件源的监听器.

java语言中每种类型的事件定义了相应的监听器接口和注册方法.

一般来说,XXX事件的监听器接口是XXXListener,注册方法是addXXXListener.

部分常见的监听器接口

事件 监听器接口及注册方法 监听器方法
ActionEvent
ActionListener

addActionListener

actionPerformed(ActionEvent e)
AdjustmentEvent
AdjustmentListener

addAdjustmentListener()

adjustValueChanged(AdjustmentEvent e)
ComponentEvent
ComponentListener

addComponentListener()


componentResized(ComponentEvent e)

componentMoved(ComponentEvent e)

componentShown(ComponentEvent e)

componentHidden(ComponentEvent e)

ContainerEvent
ContainerEventListener

addContainerEventListener()


componentAdded(ContainerEvent e)

componentRemoved(ContainerEvent e)

FocusEvent
FocusListener

addFocusListener()


focusGained(FocusEvent e)

focusLost(FocusEvent e)

ItemEvent
ItemListener

addItemListener()

itemStateChanged(ItemEvent e)
KeyEvent
KeyListener

addKeyListener()


keyTyped(KeyEvent e)

keyPressed(KeyEvent e)

keyReleased(KeyEvent e)

MouseEvent
MouseListener

addMouseListener()


mouseClicked(MouseEvent e)

mousePressed(MouseEvent e)

mouseReleased(MouseEvent e)

mouseEntered(MouseEvent e)

mouseExited(MouseEvent e)

MouseEvent
MouseMotionListener

MouseMotionListener()


mouseDragged(MouseEvent e)

mouseMoved(MouseEvent e)

TextEvent
TextListener

addTextListener()

textValueChanged(TextEvent e)
WindowEvent
WindowListener

addWindowListener()

stateChanged(ChangeEvent e)
ListSelectionEvent
ListSelectionListener

addListSelectionListener()

valueChanged(ListSelectionEvent e)
 1 import java.awt.event.ActionEvent;
 2 import java.awt.event.ActionListener;
 3
 4 import javax.swing.JButton;
 5 import javax.swing.JFrame;
 6
 7
 8 public class JButtonEvent extends JFrame implements ActionListener{
 9     public JButtonEvent(){
10         JButton button=new JButton("按钮");
11         button.addActionListener(this); //注册
12         add(button);
13     }
14     public static void main(String[] args) {
15         JButtonEvent frame=new JButtonEvent();
16         frame.setTitle("演示动作事件处理");
17         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18         frame.setSize(500,300);
19         frame.setVisible(true);
20     }
21     @Override
22     public void actionPerformed(ActionEvent e) { //实现监听器接口中的方法
23         System.out.println(((JButton)e.getSource()).getText());
24     }
25 }

运行结果

这种编程方式有许多不足,如可读性,重用性不佳等.现在比较流行使用内部类,特别是匿名内部类来实现监听类接口.

 1 import java.awt.event.ActionEvent;
 2 import java.awt.event.ActionListener;
 3
 4 import javax.swing.JButton;
 5 import javax.swing.JFrame;
 6
 7 public class JButtonEvent1 extends JFrame {
 8     public JButtonEvent1(){
 9         JButton button=new JButton("测试按钮");
10         button.addActionListener(new ActionListener() {//匿名内部类
11
12             @Override
13             public void actionPerformed(ActionEvent e) {
14                 System.out.println(((JButton)e.getSource()).getText());
15             }
16         });
17         add(button);
18     }
19     public static void main(String[] args) {
20         JButtonEvent1 frame=new JButtonEvent1();
21         frame.setTitle("演示动作事件处理");
22         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
23         frame.setSize(500,300);
24         frame.setVisible(true);
25     }
26 }
时间: 2024-08-01 21:46:18

java GUI之事件处理的相关文章

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

JAVA GUI

JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管理器为空白布局管理器时,注意设置组件的位置和大小以免出现组件显示不出来的问题:设置容器的布局管理器为流布局管理器时,下拉列表的输入框设置为可编辑时会默认扩大下拉列表的输入框长度,另外可以通过设置一个字符串内容为空格字符串的标签调整其他组件的位置,特别的对于文本框组件来说可以通过setColumns()方法调整文

JAVA GUI 工具

Java GUI图形界面开发工具 上大学那会儿比较主流的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也很久没有更新了,不过据说短小精悍,五脏俱全.SWT Designer不久前也被Google收购后重新整合进自己的产品中,然后开源了,现在名字叫:WindowBuilder Pro,看上去界面组件很丰富强大的样子,支持Swing, AWT, SWT, 以及Google自家的GWT等等. 目前JAVA图形界

JAVA GUI编程学习笔记目录

1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件 13.JAVA之GUI编程将程序打包jar JA

Java GUI 基础 Eight Puzzle (拼图游戏)

很简单使用java GUI 制作一个简单的拼图游戏 // main package HW1; import java.io.IOException; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class HW1 extends JFrame{ /** * */ public HW1_0586(String s

Java -GUI开发九九乘法表

Java GUI开发九九乘法表 (1)实现目标: 利用java自带的awt包,基础控件开发一个九九乘法表,点击可以显示对应的乘法口诀. (2)控件选择: 点击--Button 显示--TextField (3)界面设计:总体设计布局 (4)主窗体编写 将程序在屏幕中央区显示 1 /*窗口居中显示*/ 2 int Win_width=fr.getWidth(); 3 int Win_Height=fr.getHeight(); 4 Toolkit kit = Toolkit.getDefaultT

Java GUI编程中AWT/swing/SWT的优缺点

http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对Java GUI编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系(peers).也就是说,当我们利用 AWT 来构件图形用户界面的时

java GUI编程(swing)之二swing按钮组件

swing的按钮组件.在widgets 类中. 要使用按钮,必须要导入JButton import javax.swing.JButton; 按钮需要加入到Frame里面 package gui; import java.awt.Frame; import javax.swing.JFrame; import javax.swing.JButton; /** * Created by admin on 2017/6/30. * java gui 学习 */ public class Gui ex

Java GUI:将JPanel添加进JScrollPane

实现的目标: 因为在滚动框中含有很多个Java GUI 组件,因此这里采用JPanel面板包住这些组件,在用JScrollPane实现滚动 问题1:布局揉在一起 JPanel有自己默认的布局方式,因此在这里我们要自己设置流式布局 jPanel_qanda.setLayout(null); 问题2:滚动条未生效 刚开始的时候我是直接设置JPanel的大小 setSize(int width, int height) 不管设置多大,都没有滚动条 最后百度,看到了一个博客:https://www.cn