所以我正在制作一个基本的游戏而且我被鼠标困住了。我现在拥有它到你点击的位置,它会打印出坐标或点击的位置。唯一的问题是它打印的坐标是我整个电脑屏幕的坐标,而不是我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;
}
}
答案 0 :(得分:2)
不要使用PointerInfo
,所有您需要的信息都会通过MouseEvent
传递给您......
MouseEvent
包含相对于在...中引发的组件的鼠标事件的局部x / y坐标。
public void mouseClicked(MouseEvent e) {
int localX = e.getX();
int localY = e.getY();
要将localX/Y
翻译成另一个组件的上下文,您可以使用类似的内容......
e = SwingUtilities.convertMouseEvent(e.getComponent(), e, frame);
// Where frame would be the component you want to translate the current
// local context into
请查看SwingUtilities.convertMouseEvent(Component, MouseEvent, Component)
,SwingUtilities.convertPoint(Component, Point, Component)
和SwingUtilities.convertPoint(Component, int, int, Component)
了解详情。
另外,请查看How to Write a Mouse Listener
通常情况下,最好将侦听器连接到您感兴趣的组件,而不是框架,框架由多个分层组件组成,所有这些组件都可能消耗鼠标事件,从而阻止您的框架接收鼠标事件< / p>
答案 1 :(得分:0)
您可以只使用传递给回调方法的MouseEvent,而不是使用PointerInfo。具体来说,您可以使用e.getX()和e.getY()来获取相对于框架左上角的x和y位置。见http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html