用 Java 创建鼠标监听器
在 Java 中,当鼠标在特定空间中移动时,MouseListener 类会收到通知。 本教程演示如何创建 MouseListener 接口。
用 Java 创建鼠标监听器
当状态发生变化时,MouseListener 会收到通知。 这种变化可以是单击、按下和释放鼠标,或者进入和退出特定的窗口区域。
MouseListener 是 Java.awt.event 包的一部分。
Java MouseListener 的逐步机制如下:
- 当我们点击或移动鼠标时,程序中的一个对象会帮助实现界面。
- 该对象已向侦听器注册。 这就是为什么通过按下、单击或移动鼠标来生成事件的原因。
- 生成事件时,它有助于调用其中一种方法。
- 在此调用后,鼠标事件将传递给该方法。
MouseListener 有多种在不同事件上调用的方法。 这些方法在表中给出。
序号 | 方法 | 说明 |
---|---|---|
1 | void mouseClicked(MouseEvent e) | 单击鼠标(按下并释放)时调用此方法。 |
2 | void mouseEntered(MouseEvent e) | 当鼠标移动并进入组件时调用此方法。 |
3 | void mouseExited(MouseEvent e) | 当鼠标移动并退出组件时调用此方法。 |
4 | void mousePressed(MouseEvent e) | 仅当在组件上按下鼠标按钮时调用此方法。 |
5 | void mouseReleased(MouseEvent e) | 当从组件释放鼠标按钮时调用此方法。 |
现在,让我们尝试一个示例,该示例将调用表中描述的所有方法。
例子:
package jiyik;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//The main class implements the MouseListener interface
public class Mouse_Listener implements MouseListener {
//create two labels one frame and one string
Label label1, label2;
Frame Demo_Frame;
String event_invo;
//Constructor
Mouse_Listener() {
Demo_Frame = new Frame("The Mouse Listener");
label1= new Label("This is demo for the mouse listener events\n", Label.CENTER);
label2= new Label();
//set the frame layout as flowlayout
Demo_Frame.setLayout(new FlowLayout());
//add labels to the frame
Demo_Frame.add(label1);
Demo_Frame.add(label2);
//Register the created class Mouse_Listener to catch as well as respond to the mouse events,
Demo_Frame.addMouseListener(this);
//set the size of frame 450x300
Demo_Frame.setSize(450,300);
//visibility of the frame will be true
Demo_Frame.setVisible(true);
}
// mouseClicked method
public void mouseClicked(MouseEvent ev) {
event_invo+=" The mouse button was clicked";
//set the text of label 2 as even_invo
label2.setText(event_invo);
//visibility will be true
Demo_Frame.setVisible(true);
}
// mouseEntered method
public void mouseEntered(MouseEvent ev) {
// when mouse enters the window
label2.setText("The mouse has entered the window");
//visibility will be true
Demo_Frame.setVisible(true);
}
// mouseExited method
public void mouseExited(MouseEvent ev) {
//when the mouse leaves the window
label2.setText("Mouse has left the window");
// visibility as true
Demo_Frame.setVisible(true);
}
// mousePressed method
public void mousePressed(MouseEvent ev) {
// when the mouse is pressed
label2.setText("Mouse button is pressed");
//set the visibility as true
Demo_Frame.setVisible(true);
}
// mouseReleased method
public void mouseReleased(MouseEvent ev) {
//set the string event_invo
event_invo="The mouse button is released ";
label2.setText(event_invo);
//visibility as true
Demo_Frame.setVisible(true);
}
//main method
public static void main(String args[]) {
new Mouse_Listener();
}
}
输出:
上面的代码实现了上面描述的所有方法,这意味着窗口会知道鼠标何时进入、存在、按下、释放或单击。
MouseListener 通常与 Java swing 一起使用来创建界面。
例如,我们需要获取点击位置的X和Y点。 我们可以通过结合 MouseListener 和 Swing 来实现。
让我们来实现这个例子。
package jiyik;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Mouse_Listener {
private JFrame Demo_Frame;
private JLabel Label_One;
private JLabel Label_Two;
private JPanel Control_Panel;
public Mouse_Listener(){
Create_GUI();
}
public static void main(String[] args){
Mouse_Listener MouseListenerDemo = new Mouse_Listener();
MouseListenerDemo.Show_Mouse_Listener();
}
private void Create_GUI(){
Demo_Frame = new JFrame("Java SWING With MouseListener");
Demo_Frame.setSize(400,400);
Demo_Frame.setLayout(new GridLayout(3, 3));
Label_One = new JLabel("",JLabel.CENTER );
Label_Two = new JLabel("",JLabel.CENTER);
Label_Two.setSize(350,350);
Demo_Frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
Control_Panel = new JPanel();
Control_Panel.setLayout(new FlowLayout());
Demo_Frame.add(Label_One);
Demo_Frame.add(Control_Panel);
Demo_Frame.add(Label_Two);
Demo_Frame.setVisible(true);
}
private void Show_Mouse_Listener(){
Label_One.setText("X Y Points for MouseListener");
JPanel Demo_Panel = new JPanel();
Demo_Panel.setBackground(Color.green);
Demo_Panel.setLayout(new FlowLayout());
Demo_Panel.addMouseListener(new CustomMouseListener());
JLabel Msg_Label = new JLabel("Welcome to Jiyik.com",JLabel.CENTER);
Demo_Panel.add(Msg_Label);
Msg_Label.addMouseListener(new CustomMouseListener());
Demo_Panel.add(Msg_Label);
Control_Panel.add(Demo_Panel);
Demo_Frame.setVisible(true);
}
class CustomMouseListener implements MouseListener {
public void mouseClicked(MouseEvent e) {
Label_Two.setText("Mouse Clicked: ("+e.getX()+", "+e.getY() +")");
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
}
上面的代码将获取特定区域上点击位置的 x 和 y 点。 该代码使用 Java Swing 和 MouseListener。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,