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


    }
}

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

我对如何从我的 JPanel 中获取 x,y 坐标感到困惑,例如我单击的位置

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

我已经查看了 arg0 给出的函数,但找不到任何有用的东西。

我哪里错了?

4

4 回答 4

2
public class cPan extends JPanel implements ActionListener{

应该

public class cPan extends JPanel implements MouseListener{

Oracle turorial 中的更多内容如何编写鼠标侦听器并与错误的侦听器进行比较如何MouseEvents编写动作侦听器

于 2013-02-12T10:14:05.270 回答
2

ActionListener用于在发生某种不起眼的动作时通知您。

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

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

查看如何使用鼠标监听器了解更多信息

于 2013-02-12T10:14:07.867 回答
2

改用 a 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();
  }
}
于 2013-02-12T10:14:17.007 回答
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);
于 2013-02-12T10:17:45.257 回答