当前位置: 首页 > 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() {@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("单击");}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("按住不松");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("送开");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("划入");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("划出");}
}

键盘监听机制:

跟前面两个监听方法类似

@Overridepublic void keyTyped(KeyEvent e) {// 当用户按下并释放一个键,产生一个字符时调用char keyChar = e.getKeyChar();label.setText("你输入的字符是: " + keyChar);}@Overridepublic void keyPressed(KeyEvent e) {// 当用户按下某个键时调用int keyCode = e.getKeyCode();label.setText("你按下的键码是: " + keyCode);}@Overridepublic void keyReleased(KeyEvent e) {// 当用户释放某个键时调用int keyCode = e.getKeyCode();label.setText("你释放的键码是: " + keyCode);}public static void main(String[] args) {// 在事件调度线程中创建和显示 GUIjavax.swing.SwingUtilities.invokeLater(() -> new KeyboardListenerExample());}
}


http://www.mrgr.cn/news/95010.html

相关文章:

  • 【Java】链表(LinkedList)(图文版)
  • Linux IP 配置
  • 利用大语言模型生成的合成数据训练YOLOv12:提升商业果园苹果检测的精度与效率
  • Spring相关面试题
  • numpy学习笔记1:zeros = np.zeros((3, 3)) 详解
  • 安装并使用anaconda(宏观版)
  • 库的制作与原理 linux第课
  • 企业级 GitLab 开发流程全解
  • dockerfile 编写入门
  • numpy学习笔记4:np.arange(0, 10, 2) 的详细解释
  • sparksql的Transformation与 Action操作
  • 浏览器工作原理深度解析(阶段二):HTML 解析与 DOM 树构建
  • 【二分查找】模板题:在排序数组中查找元素的第一个和最后一个位置
  • React生命周期
  • 可视化图解算法:链表中倒数(最后)k个结点
  • java-正则表达式-集合-泛型
  • 【数据库】SQL设计指南:如何编写性能优异的SQL
  • el-table的行向上移动向下移动,删除选定行
  • Diffie-Hellman 加密协议介绍 (DH,DHE,ECDHE)
  • docker(1) -- centos镜像