Как найти положение окна jframe после отпускания мыши - PullRequest
0 голосов
/ 22 января 2019

Я делал визуализацию 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) {
}
...