Java Swing - 从CLick获取X,Y.

时间:2013-02-12 10:11:30

标签: java swing action

public class cPan extends JPanel implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent arg0) {


    }
}

我有上面的代码,可以从我的JPanel中捕获操作。

我很困惑如何在我的JPanel中获得x,y cordinate,例如我点击的地方

所以,如果我点击100,200(x,y),我希望能够看到这一点。

我看了arg0的功能,但找不到任何有用的东西。

我哪里错了?

4 个答案:

答案 0 :(得分:2)

public class cPan extends JPanel implements ActionListener{

应该是

public class cPan extends JPanel implements MouseListener{

更多内容在Oracle教程How to Write a Mouse Listener中,与How to Write an Action Listener的错误监听器MouseEvents进行比较

答案 1 :(得分:2)

ActionListener用于通知您何时发生某种不明显的行为。

无法提取有关导致操作的原因的信息(如鼠标点击或按键操作)

要获取有关鼠标事件的信息,您需要使用附加到您感兴趣的组件的MouseListener

查看How to use Mouse Listeners了解详情

答案 2 :(得分:2)

请改用MouseListener。通过这种方式,您将获得MouseEvent,通过调用MouseEvent#getPoint(),您可以从中获得点击的点。

public class cPan extends JPanel implements MouseListener {
  @Override
  public void mouseClicked(MouseEvent e) {
    Point p = e.getPoint();
    // or
    int x = e.getX();
    int y = e.getY();
  }
}

答案 3 :(得分:2)

您需要添加鼠标侦听器:

JPanel panel = new JPanel ();
panel.setPreferredSize (new Dimension (640, 480));
panel.addMouseListener (new MouseAdapter() {
    @Override
    public void mouseClicked (MouseEvent e) {
        JOptionPane.showMessageDialog(
            e.getComponent (), "X: " + e.getX () + ", Y: " + e.getY ());
    }
});

JFrame frame = new JFrame ("Click");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane ().setLayout (new BorderLayout ());
frame.getContentPane ().add (panel, BorderLayout.CENTER);
frame.pack ();
frame.setVisible (true);