迷宫面板 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class DirectionPanel extends JPanel { private final int WIDTH=Maze.width, HEIGHT=Maze.height; //迷宫大小 private final int WIDTH_RIGHT=100;
static final int JUMP = 20; // 移动步幅,要和迷宫方格尺寸一致
private final int IMAGE_SIZE = 20; private Maze maze; private ImageIcon up, down, right, left, currentImage; private int x, y;
addKeyListener (new DirectionListener()); x = 20; //移动图标初始位置 y = 20; up = new ImageIcon ("arrowUp21.gif"); //图标图片引用 down = new ImageIcon ("arrowDown21.gif"); left = new ImageIcon ("arrowLeft21.gif"); right = new ImageIcon ("arrowRight21.gif"); currentImage = right;
setBackground (Color.white); setPreferredSize (new Dimension(WIDTH, HEIGHT)); setFocusable(true); }
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class DirectionPanel extends JPanel
{ private final int WIDTH=Maze.width, HEIGHT=Maze.height; //迷宫大小
private final int WIDTH_RIGHT=100;
static final int JUMP = 20; // 移动步幅,要和迷宫方格尺寸一致
private final int IMAGE_SIZE = 20;
private Maze maze;
private ImageIcon up, down, right, left, currentImage;
private int x, y;
private JButton changeMaze;
private JPanel tools; public DirectionPanel()
{ maze=new Maze(); //创建迷宫类
addKeyListener (new DirectionListener()); x = 20; //移动图标初始位置
y = 20; up = new ImageIcon ("arrowUp21.gif"); //图标图片引用
down = new ImageIcon ("arrowDown21.gif");
left = new ImageIcon ("arrowLeft21.gif");
right = new ImageIcon ("arrowRight21.gif"); currentImage = right;
setBackground (Color.white);
setPreferredSize (new Dimension(WIDTH, HEIGHT));
setFocusable(true);
}
public void changeMa()
{maze=new Maze();
x = 20; //移动图标初始位置
y = 20;
currentImage = right;
}public void paintComponent (Graphics page)
{
super.paintComponent (page);
page.setColor(Color.GREEN);
maze.drawMaze(page);
currentImage.paintIcon (this, page, x, y); }//键盘监听器,可以使用户在迷宫通道上移动箭头图标,利用Maze类的viable方法判断此坐标的特定方向是否可行
private class DirectionListener implements KeyListener
{
public void keyPressed (KeyEvent event)
{
switch (event.getKeyCode())
{
case KeyEvent.VK_UP:
currentImage = up;
if(maze.viable(x,y,4)&&y>0)
y -= JUMP;
break;
case KeyEvent.VK_DOWN:
currentImage = down;
if(maze.viable(x,y,2)&&y+20<HEIGHT)
y += JUMP;
break;
case KeyEvent.VK_LEFT:
currentImage = left;
if(maze.viable(x,y,3)&&x>0)
x -= JUMP;
break;
case KeyEvent.VK_RIGHT:
currentImage = right;
if(maze.viable(x,y,1)&&x<WIDTH-20)
x += JUMP;
break;
case KeyEvent.VK_S:
changeMa();
break;
} repaint();
} public void keyTyped (KeyEvent event) {}
public void keyReleased (KeyEvent event) {}
}
}主面板
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class mainPanel extends JPanel{
private final int MAIN_WIDTH=MazeCreator.widthM*DirectionPanel.JUMP,MAIN_HEIGHT=MazeCreator.heightN*DirectionPanel.JUMP;
private final int TOOLS_WIDTH=80;
private JButton changeMaze;
private JPanel tools,MainPanel;
private DirectionPanel MazePanel; public mainPanel() {tools=new JPanel();
tools.setBackground(Color.lightGray);
tools.setOpaque(true);
changeMaze=new JButton();
changeMazeListener changeM=new changeMazeListener();
changeMaze.addActionListener(changeM);
tools.add(changeMaze);
MazePanel=new DirectionPanel(); add(tools);
add(MazePanel);
setPreferredSize (new Dimension(MAIN_WIDTH+TOOLS_WIDTH, MAIN_HEIGHT));
}
private class changeMazeListener implements ActionListener
{public void actionPerformed(ActionEvent event)
{if(event.getSource()==changeMaze)
MazePanel.changeMa();
repaint();
}
}
}窗口驱动类就加进了那个主面板...