package algorithm.bsf.maze.frame; import java.awt.Button; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JFrame; import algorithm.bsf.maze.BreadthFirstSearch; import algorithm.bsf.maze.Env; import algorithm.bsf.maze.Map; import algorithm.bsf.maze.Node; import algorithm.bsf.maze.logger.MapPanelLogger; /** * @author Fan Hongtao * @created 2009-3-16 */ @SuppressWarnings("serial") public class MazeFrame extends JFrame implements ActionListener { /** * @param args */ public static void main(String[] args) { String fileName = (args.length > 0) ? args[0] : null; Env.setInputFileName(fileName); Map map = new Map(); map.initMap(); JFrame frame = new MazeFrame(map); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } private Button button = null; private MapPanel canvas; private Map map; public MazeFrame(Map map) { this.map = map; setTitle("Map Frame"); setLayout(null); // 必需要有此语句! button = new Button("Start"); button.addActionListener(this); add(button); button.setBounds(10, 1, 80, 26); canvas = new MapPanel(map); add(canvas); canvas.setBounds(10, 35, map.getWidth() + 20, map.getHeight() + 20); pack(); setSize(map.getWidth() + 30, map.getHeight() + 80); } @Override public void actionPerformed(ActionEvent e) { Runnable r = new Runnable() { @Override public void run() { search(); } }; Thread thread = new Thread(r); thread.start(); canvas.repaint(); } private void search() { MapPanelLogger logger = new MapPanelLogger(canvas); BreadthFirstSearch search = new BreadthFirstSearch(logger); ArrayList<Node> path = search.searchPath(map.getMap(), map.getStart(), map.getStop()); logger.logPath(path); } public void chageColor(int x, int y, Color color) { canvas.chageColor(x, y, color); } }