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.MouseAdapter
inheritance并仅覆盖您感兴趣的事件的方法。
单击鼠标事件的一些示例,
以同样的方式使用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); } }
- Java:游标当前位置的列号和行号
- 如何从Eclipse中的java源代码创建流程图
- java.io.IOException:服务器返回HTTP响应代码:403表示URL
- Restlet客户端如何处理媒体类型的请求?
- 加载spring-boot和spring-data-jpa时,Hibernate无法加载JPA 2.1 Converter
- java.io.IOException:服务器返回HTTP响应代码:503为URL:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
- JAXB unmarshaling忽略SOAP Envelope / Header标记
- 从其他字符串集合的示例中拆分字符串
- 如何更新JLabel文本?