当前位置: 首页 > article >正文

JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听

动作监听: 

先创建一个图形化界面,接着创建一个按钮对象,设置按钮的大小。

添加一个addActionListener();

addActionListener() 方法定义在 java.awt.event.ActionListener 接口相关的上下文中,许多支持用户交互产生动作事件的组件类(如 JButtonJMenuItem 等)都实现了该方法。通过调用这个方法,可以将一个实现了 ActionListener 接口的对象注册到组件上,当组件上发生特定动作(通常是点击操作)时,会触发相应的动作事件,进而调用监听器中的处理方法。

import javax.swing.*;

public class Test3 {
    public static void main(String[] args){
        JFrame jFrame=new JFrame();
        jFrame.setSize(603,680);
        jFrame.setTitle("演示");
        jFrame.setAlwaysOnTop(true);
        jFrame.setLocationRelativeTo(null);
        jFrame.setDefaultCloseOperation(3);
        jFrame.setLayout(null);

        //创建一个按钮对象
        JButton jtb=new JButton();
        jtb.setBounds(0,0,100,50);
        //jtb:组件对象,表示你要给哪个组件添加事件
        //addActionListener:表示我要给组件添加哪个事件监听
        jtb.addActionListener(new  MyJFrame2());
        //把按钮添加到界面当中
        jFrame.getContentPane().add(jtb);

        jFrame.setVisible(true);
    }
}

但是,这个new MyJFrame2()只被用了一次,所以可以使用匿名内部类,在 GUI 编程中,为组件添加事件监听器时,经常使用匿名内部类来实现事件监听器接口。在 Java 中,匿名内部类是一种特殊的局部内部类,它没有显式的类名。使用匿名内部类可以在需要创建一个实现某个接口或继承某个类的对象时,无需显式定义一个新的类,从而使代码更加简洁。

 jtb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("别点");
            }

第二种方式: 

我们先声明并初始化两个JButton类,他们两个要是成员变量,这样整段代码都能使用它,接着创建成员构造方法。创建一个窗口,并创造两个按钮对象。按钮对象可以直接调用this(这里的this为了实现下面actionPerformed方法)

  • Object source = e.getSource():获取触发动作事件的组件对象。
  • if (source == jtb1):判断触发事件的组件是否为 jtb1,如果是,则将 jtb1 按钮的大小设置为 200x200 像素。
  • else if (source == jtb2):若触发事件的组件是 jtb2,则使用 Random 类生成两个 0 到 199 之间的随机整数,作为 jtb2 按钮的新宽度和高度。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class Test3 extends JFrame implements ActionListener {
     JButton jtb1=new JButton("点");
     JButton jtb2=new JButton("点");
    public Test3(){
        
        this.setSize(603,680);
        this.setTitle("演示");
        this.setAlwaysOnTop(true);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(3);
        this.setLayout(null);

        //创建一个按钮对象

        jtb1.setBounds(0,0,100,50);
        jtb1.addActionListener(this);
        jtb2.setBounds(0,0,100,50);
        jtb2.addActionListener(this);

        //jtb:组件对象,表示你要给哪个组件添加事件
        //addActionListener:表示我要给组件添加哪个事件监听

        //把按钮添加到界面当中
        this.getContentPane().add(jtb1);
        this.getContentPane().add(jtb2);

        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if(source==jtb1){
            jtb1.setSize(200,200);

        } else if (source==jtb2) {
            Random random=new Random();
            jtb2.setSize(random.nextInt(200),random.nextInt(200));

        }

    }
}

鼠标监听:

一个鼠标点击一个按钮之后,可以分为:划入动作,按下动作,松开动作,划出动作。

给按钮绑定鼠标事件:

一个简单的鼠标监听机制,当你的鼠标做相应动作的时候,程序会打印相应的动作。

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class Test3 extends JFrame implements MouseListener {
     JButton jtb1=new JButton("点");
    public Test3(){

        this.setSize(603,680);
        this.setTitle("演示");
        this.setAlwaysOnTop(true);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(3);
        this.setLayout(null);
        jtb1.setBounds(0,0,100,50);
        jtb1.addMouseListener(this);

        //把按钮添加到界面当中
        this.getContentPane().add(jtb1);

        this.setVisible(true);
    }


    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("单击");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("按住不松");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("送开");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("划入");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("划出");
    }
}

键盘监听机制:

跟前面两个监听方法类似

@Override
    public void keyTyped(KeyEvent e) {
        // 当用户按下并释放一个键,产生一个字符时调用
        char keyChar = e.getKeyChar();
        label.setText("你输入的字符是: " + keyChar);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        // 当用户按下某个键时调用
        int keyCode = e.getKeyCode();
        label.setText("你按下的键码是: " + keyCode);
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // 当用户释放某个键时调用
        int keyCode = e.getKeyCode();
        label.setText("你释放的键码是: " + keyCode);
    }

    public static void main(String[] args) {
        // 在事件调度线程中创建和显示 GUI
        javax.swing.SwingUtilities.invokeLater(() -> new KeyboardListenerExample());
    }
}


http://www.kler.cn/a/592562.html

相关文章:

  • SpringBoot项目controller层接收对应格式请求的相关RequestMapping配置
  • Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析
  • k8s基础资源管理指令
  • 《鸿蒙开发实战:音频录制、文件读取与播放功能全解析》
  • Java 集合框架
  • linux 内核 定时器(timer)
  • AI 是什么?核心概念与发展历程(人工智能的发展、基本概念、机器学习 vs 深度学习)
  • PyCharm 5的Python IDE的功能(附工具下载)
  • sql小记,20250319
  • tab页面切换
  • ansible速查手册
  • defineAsyncComponent和一般的import有什么区别
  • AI大模型在物联网行业的应用场景深度解析
  • 嵌入式面经-C语言:智能指针,`#define` 和 `const`,`typedef`,头文件中定义静态变量
  • 算法——广度优先搜索——跨步迷宫
  • List 和 Set的核心区别
  • Docker搭建MySQL主从服务器
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(五)
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • SpringData Elasticsearch:索引管理与全文检索