public class cPan extends JPanel implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
}
}
我有上面的代码,可以从我的JPanel中捕获操作。
我很困惑如何在我的JPanel中获得x,y cordinate,例如我点击的地方
所以,如果我点击100,200(x,y),我希望能够看到这一点。
我看了arg0的功能,但找不到任何有用的东西。
我哪里错了?
答案 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
。
答案 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);