因为代码长了,一次发不完,只有分多分发贴上代码接着MainFrame.java (记得必须要有box.dat  box.gif,   ok.gif,   pot.gif,   ren.gif,   qiang.gif)class DialogTime extends JDialog implements ActionListener,WindowListener {

JComboBox tlvl = new JComboBox();
JButton bok, bexit;
JLabel mes = new JLabel("我是: " );

Container m = null;
MainFrame tf;

public DialogTime(Frame f){
super(f,"推箱子", true);
tf = (MainFrame) f;
bok = new JButton("确定");
bexit = new JButton("退出");
tlvl.addItem("菜鸟级");
tlvl.addItem("业余级");
tlvl.addItem("竞赛级");

m = this.getContentPane();
m.setLayout(null);

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.setResizable(false);


mes.setBounds(70, 50, 50, 24);
tlvl.setBounds(120,50, 120, 24);

bok.setBounds(90, 130, 65, 24);
bexit.setBounds(160, 130, 65, 24);

bok.addActionListener(this);
bexit.addActionListener(this);
m.add(mes); m.add(tlvl);  m.add(bok); m.add(bexit);
int w = 300 , h = 220;
int x = (Toolkit.getDefaultToolkit().getScreenSize().width - w) / 2; 
int y = (Toolkit.getDefaultToolkit().getScreenSize().height - h) / 2; 
this.setBounds(x, y , w, h);
this.addWindowListener(this);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if ( e.getSource().equals(bexit)){
System.exit(0);
}
else{
Object obj = tlvl.getSelectedItem();
if ( obj.equals("菜鸟级")){
tf.btime = 50;
}
else if ( obj.equals("业余级")){
tf.btime = 30;
}
else if ( obj.equals("竞赛级")){
tf.btime = 10;
}
}
this.dispose();
} public void windowActivated(WindowEvent e) {
// TODO 自动生成方法存根

} public void windowClosed(WindowEvent e) {
// TODO 自动生成方法存根

} public void windowClosing(WindowEvent e) {
System.exit(0);

} public void windowDeactivated(WindowEvent e) {
// TODO 自动生成方法存根

} public void windowDeiconified(WindowEvent e) {
// TODO 自动生成方法存根

} public void windowIconified(WindowEvent e) {
// TODO 自动生成方法存根

} public void windowOpened(WindowEvent e) {
// TODO 自动生成方法存根

}

}
##################################   BaseBox.java    ########################
##################################   BaseBox.java    ########################
##################################   BaseBox.java    ########################import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;import javax.swing.JPanel;
public class BaseBox extends JPanel {

int w = 30, h = 30;

int type = 0; //物体的类型,默认为目的地,1为箱子,2为人位,3为空间,4为墙

Image img = null;
String filename = "";

public BaseBox(int type, int x, int y){
this.type = type;
this.setBounds(x,y,w,h);
if ( type == 0 )
filename = "pot.gif";
else if ( type == 1 )
filename = "box.gif";
else if ( type == 2 )
filename = "ren.gif";
else if ( type == 3 )
filename = "box.gif";
else 
filename = "qiang.gif";
img = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(filename));
}


public void setImg(String s){
img = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(s));
filename = s;
}

public String getFileName(){
return filename;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(img,0,0,this);
}
}
##################################   Build.java    ########################
##################################   Build.java    ########################
##################################   Build.java    ########################
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Build extends JFrame implements ActionListener{ int row , col;

JButton b1,b2,b3,b4,reset,exit, bok;

Container main;

JPanel bp = new JPanel();

JPanel cp = new JPanel();

ArrayList sid, bid, pid;
String rid ;
ArrayList bs;

public Build(){
main = this.getContentPane();
this.setTitle("地图生成器");

b1 = new JButton("目的");
b2 = new JButton("箱子");
b3 = new JButton("人位");
b4 = new JButton("空间");

reset = new JButton("重置");
bok = new JButton("保存");
exit = new JButton("退出");

b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
reset.addActionListener(this);
exit.addActionListener(this);
bok.addActionListener(this);

cp = new JPanel();


bp.add(b1); bp.add(b2); bp.add(b3); bp.add(b4); bp.add(bok); 
bp.add(reset); bp.add(exit); 

main.add(bp, BorderLayout.SOUTH);
main.add(cp,BorderLayout.CENTER);
this.setDefaultCloseOperation(3);
setBounds(200,150,500,450);
//this.setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
reset();
this.validate();
}

解决方案 »

  1.   

    Color color = null;

    public void reset(){

    String rrr = JOptionPane.showInputDialog(this,"请输入行数");
    String ccc = JOptionPane.showInputDialog(this,"请输入列数");
    if ( rrr == null || ccc == null ){
    return;
    }
    try{
    row = Integer.parseInt(rrr);
    col = Integer.parseInt(ccc);
    }catch(Exception e){
    JOptionPane.showMessageDialog(this,"行列只能指定为数字!");
    return;
    }
    cp.setLayout(new GridLayout(row,col));
    cp.removeAll();
    color = null;
    b1.setEnabled(true);b2.setEnabled(false);b3.setEnabled(false);b4.setEnabled(false);
    bok.setEnabled(false);

    bs = new ArrayList();
    for ( int i = 0; i < row*col; i ++ ){
    Button tb = new Button("" + (i+1));
    tb.addActionListener(this);
    cp.add(tb);
    bs.add(tb);
    }
    pid = new ArrayList();
    bid = new ArrayList();

    sid = new ArrayList();
    cp.validate();

    for ( int i = 0; i <= col; i ++ ){
    Button bb = (Button) bs.get(i);
    bb.setEnabled(false);
    bb.setBackground(Color.black);
    }
    for ( int i = col*row-1; i > col*row - col; i --){
    Button bb = (Button) bs.get(i);
    bb.setEnabled(false);
    bb.setBackground(Color.black);
    }
    for ( int i = col*2-1; i < col * row ; i ++ ){
    if ( i % col == 0 || (i+col+1) % col == 0 ){
    Button bb = (Button) bs.get(i);
    bb.setEnabled(false);
    bb.setBackground(Color.black);
    }
    }
    }

    public static void main(String[] args) {
    Build b = new Build();
    } private void setStat(ArrayList a){
    for ( int i = 0; i < a.size(); i ++ ){
    int index = (Integer.parseInt(a.get(i).toString())) -1;
    Button b = (Button) bs.get(index);
    b.setEnabled(false);
    }
    }
    private void setStat(String id){
    int index = (Integer.parseInt(id)) -1;
    Button b = (Button) bs.get(index);
    b.setEnabled(false);
    }
    public void actionPerformed(ActionEvent e) {
    if ( e.getSource().equals(exit)){
    System.exit(0);
    }else if ( e.getSource().equals(reset)){
    reset();

    }

    else if ( e.getSource().equals(b1)){
    color = Color.blue;
    b1.setEnabled(false);
    b2.setEnabled(true);
    }
    else if ( e.getSource().equals(b2)){
    color = Color.green;
    b2.setEnabled(false);
    b3.setEnabled(true);
    setStat(pid);
    }
    else if ( e.getSource().equals(b3)){
    color = Color.yellow;
    b3.setEnabled(false);
    b4.setEnabled(true);
    setStat(bid);
    }
    else if ( e.getSource().equals(b4)){
    color = Color.cyan;
    bok.setEnabled(true);
    b4.setEnabled(false);
    setStat(rid);
    }
    else if ( e.getSource().equals(bok)){
    if ( JOptionPane.showConfirmDialog(this,"真的要保存?") == 0 ){
    bok.setEnabled(false);
    try {
    FileWriter fos = new FileWriter("box.dat",true);
    BufferedWriter bw = new BufferedWriter(fos);
    bw.write(row + "," + col);
    bw.newLine();
    for ( int i = 0; i < pid.size(); i ++ ){
    if ( i != pid.size()-1 ){
    bw.write(pid.get(i).toString() + ",");
    }
    else {
    bw.write(pid.get(i).toString());
    }
    }
    bw.newLine();
    for ( int i = 0; i < bid.size(); i ++ ){
    if ( i != bid.size()-1 ){
    bw.write(bid.get(i).toString() + ",");
    }
    else {
    bw.write(bid.get(i).toString());
    }
    }
    bw.newLine();
    bw.write(rid);
    bw.newLine();
    for ( int i = 0; i < sid.size(); i ++ ){
    if ( i != sid.size()-1 ){
    bw.write(sid.get(i).toString() + ",");
    }
    else {
    bw.write(sid.get(i).toString());
    }
    }
    bw.newLine();
    bw.close();
    fos.close();
    JOptionPane.showMessageDialog(this,"保存成功");
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    }else {
    Button b = (Button)e.getSource();
    if ( color == null ){
    return;
    }
    if ( color.equals(Color.blue)){
    if ( pid.contains(b.getActionCommand())){
    pid.remove(b.getActionCommand());
    b.setBackground(new Color(212,208,200));
    return;
    }else
    pid.add(b.getActionCommand());
    }else if ( color.equals(Color.green)){
    if ( bid.contains(b.getActionCommand())){
    bid.remove(b.getActionCommand());
    b.setBackground(new Color(212,208,200));
    return;
    }else
    bid.add(b.getActionCommand());

    } else if ( color.equals(Color.yellow)){
    if ( rid != null && rid.equals(b.getActionCommand())){
    rid = "";
    b.setBackground(new Color(212,208,200));
    return;
    }else{
    rid = b.getActionCommand();
    if ( rid != null && !rid.equals("")){
    Button temp = (Button) bs.get(Integer.parseInt(rid)-1);
    temp.setBackground(new Color(212,208,200) );
    }
    }
    } else if ( color.equals(Color.cyan)){
    if ( sid.contains(b.getActionCommand())){
    sid.remove(b.getActionCommand());
    b.setBackground(new Color(212,208,200));
    return;
    }else
    sid.add(b.getActionCommand());
    }
    b.setBackground(color);
    }

    }}