Java 爪哇鼠标听器
我有一堆jlabel,我想捕获鼠标点击事件。目前,我必须使用:Java 爪哇鼠标听器,java,mouselistener,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(M
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!");
}
我想知道是否有一个更整洁的方式来做这件事,而不是有一堆我不希望的事情
编辑:
上述方法有效,但netBeans说add@override anotation。这是什么意思
编辑:好的,明白了。已修复并已解决。您可以扩展,只需覆盖您真正感兴趣的事件。可以使用实现接口的类,因此不需要实现所有方法
但是,通过覆盖感兴趣的方法,可以获得所需的行为。例如,如果重写mouseClicked
方法,则可以为鼠标单击事件定义一些行为
例如(未测试的代码):
在上面的代码中,JLabel
将在被单击时向控制台打印“Clicked!
”。使用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.awt.event.MouseAdapter继承,只覆盖您感兴趣的事件的方法。单击鼠标事件的一些示例 同样,您可以使用鼠标按下或其他鼠标事件
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开始。我想知道如何单独实现MouseAdapter,这样代码就不会内联了?我无法扩展,因为我已经在扩展JFrame。您可以创建一个单独的类,例如,
MyMouseListener
as:公共类MyMouseListener extends MouseAdapter(){public void mosuePressed(MouseEvent me){//无论您想发生什么}
然后将其作为鼠标侦听器添加到UI代码中:addMouseListener(new MyMouseListener());现在,让新实现的MyMouseListener
可以使用UI元素的一种方法是通过构造函数参数。如果你想要详细信息/代码,请告诉我。那太好了。我完全按照你说的做了,现在有了这个功能。非常感谢。
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);
}
}
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);
}
}