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

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());
    }
}

相关文章:

  • ESP32的IDF开发学习-驱动ov2640并显示在屏幕上
  • C++(八)vector
  • 国产编辑器EverEdit - 语法着色文件的语法
  • 【一起来学kubernetes】16、CronJob使用详解
  • OpenGL 将屏幕上的二维坐标转换为三维空间中的一个点
  • macOS homebrew - 切换源
  • 当前有哪些学习资料可以帮助我学习整机性能方面的知识吗
  • Android中的layout_gravity与gravity属性
  • Canary Capital 向 SEC 递交首个 SUI ETF 申请文件
  • 如何用AI轻松制作PPT,提升工作效率和演讲质量
  • 【MySQL】函数
  • Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第二章:2.1~2.2)
  • Vue3组合式函数(滚动监测 useScroll)
  • 配置银河麒麟V10高级服务器操作系统安装vmware tools。在您的计算机上尚未找到用于此虚拟机的 VMwareTools。安装将无法继续。
  • Java 大视界 -- 基于 Java 的大数据分布式存储系统的数据备份与恢复策略(139)
  • Qt 关键技术点总结与实践经验
  • docker登陆问题
  • Docker启动mysql容器并绑定卷,容器自动退出
  • Java JAR包的`META-INF`目录下可以放置多种配置文件的整理
  • es-将知识库中的数据转换为向量存储到es并进行相似性检索
  • “不意外”和“不遗余力”,直击上海商超对接外贸企业
  • 王毅会见俄罗斯外长拉夫罗夫
  • 北美票房|《罪人》遭媒体唱衰,好莱坞业内人士集体反击
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了
  • 清华数字政府与治理研究院揭牌:服务数字政府建设需求
  • 涨价应对关税变化是短期之策,跨境电商塑造新品牌开辟“新蓝海”