【问题标题】:Is it possible to get mouse inputs from JFrame?是否可以从 JFrame 获取鼠标输入?
【发布时间】:2015-04-28 12:53:37
【问题描述】:

美好的一天!我尝试过使用 Swing 和 AWT,偶然发现了 java.swing.JFrame 和 java.awt.event.MouseListener。

基于以下代码:

Game.java

    (...)

    public Game() {
    frame = new JFrame();

    ih = new IH();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    (...)
    frame.add(this);
    frame.addMouseListener(ih);
}

IH.java

    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;

    public class IH implements MouseListener {

       public void mouseClicked(MouseEvent e) {    
            System.out.println(e.getX());
            System.out.println(e.getY());
            System.out.println("Got clicked");
       }

       public void mouseEntered(MouseEvent e) {    }
       public void mouseExited(MouseEvent e) {    }
       public void mousePressed(MouseEvent e) {    }

    }

我没有收到控制台的任何输出,尽管我也没有收到任何错误。我期望在 JFrame 中单击的位置收到 x 和 y 坐标。我怎样才能做到这一点?或者,在 JFrame 中不可能做到这一点吗?那我应该用什么?

【问题讨论】:

  • 给定frame.add(this);,试试this.addMouseListener(ih);。但是为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。

标签: java swing jframe mouselistener


【解决方案1】:

在本地测试它并按预期工作。 frame.add(this) 加了什么?

public class Test {

public static void main(String[] args) {
    JFrame t = new JFrame();
    t.setSize(500, 500);
    t.addMouseListener(new IH());
    t.show();
}

public static class IH implements MouseListener{

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println(e.getX());
        System.out.println(e.getY());

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}

}

【讨论】:

  • 您确实知道 t.show( ) 已被弃用。您应该改用 t.setVisible(true) ......无论如何,谢谢。您的代码有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多