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!"); } 

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

编辑:

  class MyAdapter extends MouseAdapter { public void mouseClicked(MouseEvent event) { System.out.println(event.getComponent()); } } 

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

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

使用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); } } 

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

然而,通过重写感兴趣的方法,可以获得期望的行为。 例如,如果一个覆盖mouseClicked方法,则可以为鼠标单击事件定义一些行为。

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

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

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

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

 public class MouseEventDemo ... implements MouseListener { //where initialization occurs: //Register for mouse events on blankArea and the panel. blankArea.addMouseListener(this); addMouseListener(this); ... public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); } public void mouseEntered(MouseEvent e) { saySomething("Mouse entered", e); } public void mouseExited(MouseEvent e) { saySomething("Mouse exited", e); } public void mouseClicked(MouseEvent e) { saySomething("Mouse clicked (# of clicks: " + e.getClickCount() + ")", e); } void saySomething(String eventDescription, MouseEvent e) { textArea.append(eventDescription + " detected on " + e.getComponent().getClass().getName() + "." + newline); } } 

您可以从java.awt.event.MouseAdapterinheritance并仅覆盖您感兴趣的事件的方法。

单击鼠标事件的一些示例,

以同样的方式使用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); } }