我在检查鼠标是否用JFrame点击时遇到了麻烦。当我使用public void mousePressed(MouseEvent e)打印一些东西时,我用鼠标点击,它不会打印任何东西。它不会给出错误,它只是打印出任何东西。下面是我的代码:
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class tuna extends JFrame
{
private JTextArea textArea;
public static void main(String[] args)
{
//Run the program
tuna run = new tuna();
run.setDefaultCloseOperation(3);
run.setSize(1200, 1000);
run.setVisible(true);
}
public tuna()
{
super("Simple JFrame");
//add a simple JScrollPane
textArea = new JTextArea(10,10);
JScrollPane scrollPane = new JScrollPane(textArea);
textArea.setEditable(true);
add(scrollPane);
}
//This doesn't print anything when i am clicking in the JFrame
public void mousePressed(MouseEvent e)
{
if(e.getButton() == MouseEvent.BUTTON1)
{
System.out.println("left");
}
else if(e.getButton() == MouseEvent.BUTTON3)
{
System.out.println("right");
}
}
}提前谢谢你。
发布于 2015-06-28 17:13:25
首先,您需要一个MouseListener,因此在本例中,您可以创建一个单独的MouseListener,也可以使用当前的JFrame类本身,如下所示
public class Tuna extends JFrame implements MouseListener
Tuna而不是tuna.
MouseEvents上响应的元素应该注册到第一步中创建的MouseListener中,在构造函数中。textArea.addMouseListener(this);
MouseListener的元素是什么,目前你的整个框架都被TextArea覆盖了,所以在JFrame上注册listener不会有什么帮助,相反,只要有可能,编辑器就会显示适当的编译器错误,就像你刚刚写的那样,使用@Override注解来添加它。public void mousePressed(MouseEvent e)
而不是
@Override
public void mousePressed(MouseEvent e)
因为此方法仅在实现MouseListener时才起作用
请参阅此链接以了解更多信息,https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
https://stackoverflow.com/questions/31097682
复制相似问题