【发布时间】:2014-09-27 13:15:36
【问题描述】:
所以我正在制作一个基本游戏,但我被鼠标卡住了。我现在有它,你点击的地方,它会打印出坐标或点击的位置。唯一的问题是它打印的坐标是我整个计算机屏幕的坐标,而不是我的 JFrame 中的坐标。我查了一下,看到了一些关于将它添加到框架中的内容,但是,我已经尝试过......
frame.addMouseListener(new MouseInput(client));
这是我所拥有的基础知识。
public void init(){
addMouseListener(new MouseInput(this));
}
public static void main(String[] args){
Client client = new Client();
client.setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
client.setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
client.setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
//client.addMouseListener(new MouseInput(client));
JFrame frame = new JFrame(client.title);
frame.add(client);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.addMouseListener(new MouseInput(client));
client.start();
}
public void mouseClicked(MouseEvent e) {
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
double x = (double) b.getX();
double y = (double) b.getY();
m.setX((int) x);
m.setY((int) y);
System.out.println("Mouse Clicked at ( " + x + ", " + y + ")");
}
还有这个类...:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class MouseInput extends JFrame implements MouseListener
{
private int x = 0;
private int y = 0;
Client client;
public MouseInput(Client client){
this.client = client;
}
public void mouseClicked(MouseEvent e) {
client.mouseClicked(e);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
client.mouseReleased(e);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void setX(int x){
this.x = x;
}
public void setY(int y){
this.y = y;
}
}
【问题讨论】:
-
监听器应该连接到感兴趣的组件,而不是框架。为了尽快获得更好的帮助,请发布MCVE(最小、完整、可验证的示例)。
标签: java swing awt mouselistener