我在检查鼠标是否已使用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");
}
}
}
提前谢谢。
答案 0 :(得分:1)
您可以创建自己的鼠标侦听器并将其添加到textArea或其他组件。 例如:
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);
textArea.addMouseListener(new CustomListener());
add(scrollPane);
}
//This doesn't print anything when i am clicking in the JFrame
public class CustomListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent mouseEvent) {
if(mouseEvent.getButton() == MouseEvent.BUTTON1)
{
System.out.println("left");
}
else if(mouseEvent.getButton() == MouseEvent.BUTTON3)
{
System.out.println("right");
}
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
}
}
}
答案 1 :(得分:1)
在您的概念和源代码中,几乎没有问题
首先你需要一个MouseListener
,所以在你的情况下,你可以
创建单独的MouseListener
或使用当前的JFrame
类
本身,像这样
public class Tuna extends JFrame implements MouseListener
我还建议您遵循正确的命名惯例并使用Tuna
代替tuna
。
然后您要在MouseEvents
上回复的元素应该是
在构造函数中注册第一步中创建的MouseListener
。
textArea.addMouseListener(this);
还要确定要注册的元素
MouseListener
,目前您的整个框架都由TextArea覆盖,
因此,在JFrame
上注册监听器将无济于事,而是将其添加
JTextArea
编辑显示,尽可能尝试使用@Override
注释
然后,在您编写的情况下,适当的编译器错误
public void mousePressed(MouseEvent e)
而不是
@Override
public void mousePressed(MouseEvent e)
由于此方法仅在您实施MouseListener
请参阅此链接以了解更多信息, https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html