Java鼠标监听器

17

我有一堆JLabel标签,我想捕捉鼠标点击事件。目前我必须使用:

public void mouseClicked(MouseEvent arg0) {

}

public void mouseExited(MouseEvent arg0) {

}

public void mouseEntered(MouseEvent arg0) {

}

public void mousePressed(MouseEvent arg0) {

}

public void mouseReleased(MouseEvent arg0) {

    System.out.println("Welcome to Java Programming!"); 
}

我想知道是否有更简洁的方法来做这件事,而不是需要陷阱一堆我不希望的事件?

编辑:

    class MyAdapter extends MouseAdapter {
    public void mouseClicked(MouseEvent event) {

        System.out.println(event.getComponent());
    }
}

上面的代码可以工作,但NetBeans说要添加@override注释。这是什么意思?

编辑:好了,明白了,问题已经解决。

5个回答

27

使用MouseAdapter()

MouseAdapter()是一个抽象的适配器类,用于接收鼠标事件。该类中的方法均为空。此类作为创建监听器对象的便利而存在。 因此,你只需要实现你想要的方法,例如以下示例:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass extends JPanel {

  public MainClass() {

      addMouseListener(new MouseAdapter() { 
          public void mousePressed(MouseEvent me) { 
            System.out.println(me); 
          } 
        }); 

  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(200, 200);
    frame.setVisible(true);
  }
}

谢谢。我很抱歉要问这个问题,但我刚开始学习Java。我想知道如何单独实现MouseAdapter,以便代码不是内联的?我无法扩展,因为我已经在扩展JFrame了。 - iTEgg
1
你可以创建一个名为MyMouseListener的单独类,如下所示:public class MyMouseListener extends MouseAdapter(){ public void mosuePressed(MouseEvent me){ //需要执行的操作 } }然后将其作为鼠标监听器添加到UI代码中:addMouseListener(new MyMouseListener());现在,让你新实现的MyMouseListener能够访问UI元素的一种方法是通过构造函数参数。如果你需要详细的代码,请告诉我。 - ring bearer
太好了。我已经按照你说的做了,现在有了这个功能。谢谢你。 - iTEgg

8

可以使用实现了MouseListener接口的MouseAdapter类,这样就不需要实现所有方法。

但是,通过重写感兴趣的方法,可以获得所需的行为。例如,如果重写了mouseClicked方法,则可以为鼠标单击事件定义一些行为。

例如(未经测试的代码):

JLabel label = new JLabel("Hello");

label.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        System.out.println("Clicked!");
    }
});

在上面的代码中,JLabel 在被点击时会将 "Clicked!" 打印到控制台。

5

您可以扩展MouseAdapter,并仅覆盖您真正感兴趣的事件。


1
一些鼠标点击事件的示例,同样地,您可以使用mousePressed或其他鼠标事件。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Work1 extends JFrame{

    private JPanel panelNew;

    public Work1(){
        super("Work 1");


        // create Panel
        panelNew = new JPanel();
        panelNew.setLayout(null);
        panelNew.setBackground(Color.cyan );
        add(panelNew);

        // create Button
        JButton btn = new JButton("click me");
        // position and size of a button
        btn.setBounds(100, 50, 150, 30);

        panelNew.add(btn);


        // add event to button
        btn.addMouseListener(new MouseAdapter() { 
                public void mouseClicked(MouseEvent me) { 

                     // change text of button after click

                     if (btn.getText() == "abraCadabra"){
                          btn.setText("click me again") ;
                     }
                     else  btn.setText("abraCadabra");
                } 
         });        
    }




    public static void main(String[] args){
        Work1 go1 = new Work1();
        go1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        go1.setSize(320,200);
        go1.setVisible(true);   
    }




}

1
您可以继承自java.awt.event.MouseAdapter,并重写您感兴趣的事件方法即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接