Swing 如何进行事件监听

示例 1 : 按钮监听

创建一个匿名类实现ActionListener接口,当按钮被点击时,actionPerformed方法就会被调用

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel; public class TestGUI {
public static void main(String[] args) { JFrame f = new JFrame("LoL");
f.setSize(400, 300);
f.setLocation(580, 200);
f.setLayout(null); final JLabel l = new JLabel(); ImageIcon i = new ImageIcon("e:/project/j2se/shana.png");
l.setIcon(i);
l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight()); JButton b = new JButton("隐藏图片");
b.setBounds(150, 200, 100, 30); // 给按钮 增加 监听
b.addActionListener(new ActionListener() { // 当按钮被点击时,就会触发 ActionEvent事件
// actionPerformed 方法就会被执行
public void actionPerformed(ActionEvent e) {
l.setVisible(false);
}
}); f.add(l);
f.add(b);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);
}
}

示例 2 : 键盘监听

键盘监听器: KeyListener

keyPressed 代表 键被按下

keyReleased 代表 键被弹起

keyTyped 代表 一个按下弹起的组合动作

KeyEvent.getKeyCode() 可以获取当前点下了哪个键

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel; public class TestGUI {
public static void main(String[] args) { JFrame f = new JFrame("LoL");
f.setSize(400, 300);
f.setLocation(580, 200);
f.setLayout(null); final JLabel l = new JLabel(); ImageIcon i = new ImageIcon("e:/project/j2se/shana.png");
l.setIcon(i);
l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight()); // 增加键盘监听
f.addKeyListener(new KeyListener() { // 键被弹起
public void keyReleased(KeyEvent e) { // 39代表按下了 “右键”
if (e.getKeyCode() == 39) {
// 图片向右移动 (y坐标不变,x坐标增加)
l.setLocation(l.getX() + 10, l.getY());
}
} //键被按下
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub } // 一个按下弹起的组合动作
public void keyTyped(KeyEvent e) { }
}); f.add(l); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);
}
}

示例 3 : 鼠标监听

MouseListener 鼠标监听器

mouseReleased 鼠标释放

mousePressed 鼠标按下

mouseExited 鼠标退出

mouseEntered 鼠标进入

mouseClicked 鼠标点击

在本例中,使用mouseEntered,当鼠标进入图片的时候,图片就移动位置

package gui;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel; public class TestGUI {
public static void main(String[] args) { final JFrame f = new JFrame("LoL");
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.setLayout(null); final JLabel l = new JLabel();
ImageIcon i = new ImageIcon("e:/project/j2se/shana_heiheihei.png");
l.setIcon(i);
l.setBounds(375, 275, i.getIconWidth(), i.getIconHeight()); f.add(l); l.addMouseListener(new MouseListener() { // 释放鼠标
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } // 按下鼠标
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub } // 鼠标退出
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } // 鼠标进入
public void mouseEntered(MouseEvent e) { Random r = new Random(); int x = r.nextInt(f.getWidth() - l.getWidth());
int y = r.nextInt(f.getHeight() - l.getHeight()); l.setLocation(x, y); } // 按下释放组合动作为点击鼠标
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub }
}); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);
}
}

示例 4 : 适配器

MouseAdapter 鼠标监听适配器

一般说来在写监听器的时候,会实现MouseListener。

但是MouseListener里面有很多方法实际上都没有用到,比如mouseReleased ,mousePressed,mouseExited等等。

这个时候就可以使用 鼠标监听适配器,MouseAdapter 只需要重写必要的方法即可

package gui;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel; public class TestGUI {
public static void main(String[] args) { final JFrame f = new JFrame("LoL");
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.setLayout(null); final JLabel l = new JLabel(""); ImageIcon i = new ImageIcon("e:/project/j2se/shana_heiheihei.png");
l.setIcon(i);
l.setBounds(375, 275, i.getIconWidth(), i.getIconHeight()); f.add(l); // MouseAdapter 适配器,只需要重写用到的方法,没有用到的就不用写了
l.addMouseListener(new MouseAdapter() { // 只有mouseEntered用到了
public void mouseEntered(MouseEvent e) { Random r = new Random(); int x = r.nextInt(f.getWidth() - l.getWidth());
int y = r.nextInt(f.getHeight() - l.getHeight()); l.setLocation(x, y); }
}); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);
}
}

更多内容,点击了解: Swing 如何进行事件监听

Java自学-图形界面 事件监听的更多相关文章

  1. Java自学-图形界面 Swing中的线程

    Swing中的线程 步骤 1 : 三种线程 在Swing程序的开发中,需要建立3种线程的概念 初始化线程 初始化线程用于创建各种容器,组件并显示他们,一旦创建并显示,初始化线程的任务就结束了. 事件调 ...

  2. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  3. java鼠标与键盘事件监听

    package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...

  4. Java设计模式——观察者模式(事件监听)

    最近在看Tomcat和Spring的源码,在启动的时候注册了各种Listener,事件触发的时候就执行,这里就用到了设计模式中的观察者模式. 引-GUI中的事件监听 想想以前在学Java的GUI编程的 ...

  5. Java自学-图形界面 容器

    Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的. 窗体型容器有两个,一个是JFrame,一个是JDialog 步骤 1 : JFrame ...

  6. java中的key事件监听机制

    package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.sw ...

  7. Java SE (3) 之 事件监听

    package com.sun; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo ...

  8. java图形化界面-------鼠标监听画圆----------使用匿名类

    package com.aa; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; ...

  9. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

随机推荐

  1. softmax、cross entropy和softmax loss学习笔记

    之前做手写数字识别时,接触到softmax网络,知道其是全连接层,但没有搞清楚它的实现方式,今天学习Alexnet网络,又接触到了softmax,果断仔细研究研究,有了softmax,损失函数自然不可 ...

  2. T133308 57级返校测试重测-T3-成绩单

    大致题意: 给定n个学生的学号和分数, 求各个分数段的人数, 求把学号排序后的序列, 求满分的人数以及学号. 基本思路: 虽然看起来很繁琐(?),但就非常非常的简单,直接按题意做就好了. 然后有个坑, ...

  3. Maven如何利用父工程对版本进行统一管理

    项目开发中我们该怎么对项目依赖的版本进行统一管理呢 答:创建一个父级工程,让所有的业务模块都继承该父级工程,即所有的业务都为Module 在父级工程pom文件添加<dependencyManag ...

  4. split().reverse().join()代码解析

    split() 方法用于把一个字符串分割成字符串数组. reverse() 方法用于颠倒数组中元素的顺序. join() 方法用于把数组中的所有元素放入一个字符串.

  5. [翻译]ASP.NET Core在 .NET 5 Preview 7的更新

    .NET 5 Preview 7现在可以用了,可以进行评估了.这是此版本中的新增功能: Blazor WebAssembly应用程序现在针对.NET 5 更新了Blazor WebAssembly的调 ...

  6. 附002.Nginx代理相关模块解析

    一 ngx_http_proxy_module模块 1.1 proxy_pass配置 proxy_pass URL; Context: location, if in location, limit_ ...

  7. Java 并发实践 — ConcurrentHashMap 与 CAS

    转载 http://www.importnew.com/26035.html 最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念. ...

  8. Git 撤销更改

    一.未使用 git add 缓存代码时 可以使用 git checkout -- filepathname (比如: git checkout -- readme.md  ,不要忘记中间的 “--” ...

  9. MySQL(四)数据备份与还原

    数据备份与还原: 备份:将当前已有的数据或者记录保留 还原:将已经保留的数据恢复到对应的表中 为什么要做备份还原: 1.防止数据丢失:被盗.误操作 2.保护数据的记录 数据备份还原的方式很多:数据表备 ...

  10. Promise对象 异步编程

    Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是 ...