Java MouseListener

iTE*_*Egg 13 java mouselistener

我有一堆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!"); 
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个更整洁的方式来做这个,而不是有一堆我不希望陷阱的事件?

编辑:

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

        System.out.println(event.getComponent());
    }
}
Run Code Online (Sandbox Code Playgroud)

上述工作,但netBeans说添加@override anotation.这是什么意思?

编辑:好的,明白了.修复并解决了.

rin*_*rer 24

使用 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);
  }
}
Run Code Online (Sandbox Code Playgroud)


coo*_*ird 8

可以使用MouseAdapter实现MouseListener接口的类,因此不需要实现所有方法.

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

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

JLabel label = new JLabel("Hello");

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

在上面的代码中,单击时JLabel会打印Clicked!到控制台.

  • +1 Mouse Adapter确实存在. (4认同)

Bil*_*ard 5

您可以改为扩展MouseAdapter,只需覆盖您真正感兴趣的事件.