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. MapReduce的运行流程概述

    MapReduce处理数据的大致流程 ①InputFormat调用RecordReader,从输入目录的文件中,读取一组数据,封装为keyin-valuein对象 ②将封装好的key-value,交给 ...

  2. MySQL主从复制--单库复制搭建

    背景说明 负责公司MySQL数仓的搭建和维护,因为前端业务涉及到一次业务表的分库,导致整个平台新增加一台MySQL服务器,需要将该库数据通过主从复制同步至原有的数仓实例. 数据流向说明如下图: 业务环 ...

  3. Python Ethical Hacking - VULNERABILITY SCANNER(1)

    HTTP REQUESTS BASIC INFORMATION FLOW The user clicks on a link. HTML website generates a request(cli ...

  4. react 实战:写一个年份选择器

    上代码. 组件的Js文件. import React, { Component } from "react"; import Style from './myYearSelect. ...

  5. Fisher算法+两类问题

    文章目录 一.Fisher算法 二.蠓的分类问题: 三.代码实现: 一.Fisher算法 二.蠓的分类问题: 两种蠓Af和Apf已由生物学家根据它们的触角和翼长加以区分(Af是能传播花粉的益虫,Apf ...

  6. javascrip jason

    JavaScript JSONJSON 是用于存储和传输数据的格式. JSON 通常用于服务端向网页传递数据 . <html><head><meta http-equiv ...

  7. Java线程-- 线程池

    1.线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 为什么要使用线程池? 在java中,如果每个请求到达就创 ...

  8. LFM oversea投资笔记、思摩尔、移卡、建业新生活、鑫苑物业

    LFM oversea 1.公司简介 2.业务展望 3. 投资策略 LFM oversea介绍 LFM oversea是在开曼成立的投资基金, 专注于中国优质企业在香港和美国IPO过程中的 基石.锚定 ...

  9. Python2.7 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed 问题解决

    # 报错信息 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.insta ...

  10. acwing 173. 矩阵距离(bfs)

    给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...