Java:检查鼠标是否已被点击

时间:2015-06-28 08:38:49

标签: java mouse click

我在检查鼠标是否已使用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");
    }
}


}

提前谢谢。

2 个答案:

答案 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)

  1. 在您的概念和源代码中,几乎没有问题

    首先你需要一个MouseListener,所以在你的情况下,你可以 创建单独的MouseListener或使用当前的JFrame类 本身,像这样

    public class Tuna extends JFrame implements MouseListener

  2. 我还建议您遵循正确的命名惯例并使用Tuna代替tuna

  3. 然后您要在MouseEvents上回复的元素应该是 在构造函数中注册第一步中创建的MouseListener

    textArea.addMouseListener(this);

  4. 还要确定要注册的元素 MouseListener,目前您的整个框架都由TextArea覆盖, 因此,在JFrame上注册监听器将无济于事,而是将其添加 JTextArea

  5. 编辑显示,尽可能尝试使用@Override注释 然后,在您编写的情况下,适当的编译器错误

    public void mousePressed(MouseEvent e)

    而不是

    @Override

    public void mousePressed(MouseEvent e)

    由于此方法仅在您实施MouseListener

  6. 时有效

    请参阅此链接以了解更多信息, https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html