Я пытаюсь написать алгоритм поиска пути, чтобы попытаться внедрить A * в интерфейс JPanel. Код выглядит следующим образом. Как вы можете видеть, я случайным образом генерирую цвет квадратов для лабиринта, используя генератор случайных чисел. Ниже приведена элементарная реализация исходного кода:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Scanner;
import java.util.Random;
public class algo extends JPanel
implements MouseListener, MouseMotionListener
{
static int[][] map;
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(Color.WHITE);
//draw a for loop to print the map
for (int i = 0; i < map.length; i++) {
for(int j = 0; j < map[i].length; j++) {
g.setColor(Color.WHITE);
if(map[i][j] == 1) {
g.setColor(Color.BLACK);
}
g.fillRect(j * 20, i * 20, map[i].length * 20, map.length *20);
}
}
}
public static void main(String[] args) {
System.out.println("Welcome to the A* Shortest Pathfinding Robot Program \n *****"
+ "**************************"
+ "********************\n");
System.out.println("How large would you like your graph to be? Enter 2 consecutive numbers, one for length, one for width:\n");
Scanner sizeScan = new Scanner(System.in);
int length = sizeScan.nextInt();
int width = sizeScan.nextInt();
map = new int[length][width];
Random gridGenerate = new Random();
for(int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
map[i][j] = gridGenerate.nextInt(2);
System.out.print(map[i][j] + " ");
}
System.out.println();
}
JFrame f = new JFrame("A Star Pathfinder");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
algo star = new algo();
f.add(star);
f.setSize(length * 20, width * 20);
f.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e) {}
@Override
public void mouseMoved(MouseEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Successfully Clicked");
if (SwingUtilities.isLeftMouseButton(e)) {
System.out.println("This is the left mouse button that is clicked");
}
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
}
Когда я запустил метод main (), я смог успешно сгенерировать лабиринт:
Вот "Лабиринт", сгенерированный из кода
Однако, когда я попытался реализовать действие MouseClick () в лабиринте, ничего не произошло. У меня есть операторы печати, чтобы попытаться проверить это, и каждое возможное решение не решило проблему.
- Попытка реализовать метод run () внутри основного кода
- Попытка реализовать метод run () внутри класса
- Попытка создать класс закрытого обработчика?
Есть еще идеи, почему mouseHandler не отвечает на мои запросы?