我正在制作A * Pathfinder可视化文件,并且在使用GUI时遇到了麻烦。我的代码的工作方式是,一开始,在框架上放置了一层瓷砖。然后,一旦用户单击图块,它将更改颜色以表示开始或结束。我的问题是用户点击。我在弄清楚用户单击鼠标的位置时遇到了麻烦。
我已经在使用MouseInfo.getPointerInfo().getLocation().getX()
和MouseInfo.getPointerInfo().getLocation().getY()
查找鼠标的位置。但是,我需要找到鼠标相对于窗口的位置。为此,我需要找到窗口的位置。这是我达不到的地方。我的代码可以找到窗口的位置吗?我想这样做,以便通过检测何时释放鼠标(已经有public void mouseReleased
)并找到窗口的位置来使代码起作用。
public class Frame extends JFrame implements MouseListener {
int clicker = 0;
public Frame(int sizeX, int sizeY) {
setSize(sizeX, sizeY);
setTitle("A*Pathfinding");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(0,0);
setUpGrid(sizeX, sizeY);
setResizable(false);
setVisible(true);
addMouseListener(this);
}
private void setUpGrid(int sizeX, int sizeY) {
getContentPane().setLayout(new GridLayout(sizeY / 50, sizeX / 50));
int tileNum = 0;
for (int i = 0; i < sizeX / 50; i++) {
for (int j = 0; j < sizeY / 50; j++) {
getContentPane().add(new Tile(i * 48 + 17, j * 48 + 6, Color.white));
tileNum++;
}
}
int[][] tileArray = new int[(int) Math.sqrt(tileNum)][(int) Math.sqrt(tileNum)];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Frame(1000, 1000);
}
public void mouseClicked(MouseEvent arg0) {
int mouseX = (int) MouseInfo.getPointerInfo().getLocation().getX();
int mouseY = (int) MouseInfo.getPointerInfo().getLocation().getY();
System.out.println(mouseX);
System.out.println(mouseY);
}
public void mouseReleased(MouseEvent arg0) {
}