我正在创建一个地图编辑器,他们点击的位置将用于向地图添加数据点。
public MapEditor() throws HeadlessException, FileNotFoundException, XMLStreamException {
super("MapEditor");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Set JFrame properties.
this.setTitle("Map Editor");
this.setSize(PREFERRED_WIDTH, PREFERRED_HEIGHT);
this.setBackground(Color.gray);
this.setJMenuBar(makeMenuBar());
JPanel mainPanel = new JPanel( new BorderLayout());
Icon image = new ImageIcon("map.jpg");
JLabel label = new JLabel(image);
scrollPane = new JScrollPane();
scrollPane.getViewport().add(label);
scrollPane.addMouseListener(this);
mainPanel.add(scrollPane, BorderLayout.CENTER);
this.getContentPane().add(mainPanel);
this.getContentPane().add(makeStatusBar(), BorderLayout.SOUTH);
setVisible(true);
}
单击鼠标时我也有以下事件:
public void mouseClicked(MouseEvent e) {
int x = getX();
int y = getY();
System.out.println("clicked at (" + x + ", " + y + ")");
}
但是,无论我在窗口中单击何处,它都会返回相同的值。我注意到如果我将整个窗口移动到屏幕上的其他位置,它会返回不同的值。它们似乎对应于窗口的左上角。我已经尝试将MouseListener添加到不同的组件,但我得到了相同的结果。一些帮助将不胜感激。
答案 0 :(得分:5)
使用MouseAdapter
代替它,因为它是用于接收鼠标事件的抽象适配器类。
有关代码示例,请参阅Java MouseListener的已接受答案。
编辑:您没有使用MouseEvent
变量引用,因此getX()
和getY()
将无法返回您的预期,除非getX()
和getY()
是您的自己的方法?
将您的代码更改为:
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("clicked at (" + x + ", " + y + ")");
}
答案 1 :(得分:0)
想通了。它必须是:
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("clicked at (" + x + ", " + y + ")");
}
在我刚刚获得窗格的X和Y之前,而不是鼠标事件发生的位置