需要源码小伙伴可以到:”MINIIT资源库“获取,作者承诺免费
MineGame.java(程序入口)
package cn.itbaizhan.mine;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import java.io.*;
public class MineGame extends JFrame implements ActionListener {
JMenuBar bar;
JMenu fileMenu1, fileMenu2;
JMenuItem 初级, 中级, 高级, 自定义, 扫雷榜;
JMenuItem 介绍, 玩法;
MineArea mineArea = null;
File 英雄榜 = new File("英雄榜.txt");
Hashtable hashtable = null;
ShowRecord showHeroRecord = null;
JDialog set = null;
JPanel panel, panel1, panel2, panel3, panel4;
JLabel label, label1, label2, label3;
JTextField row = null, column = null, mine = null;
JButton 确认,取消;
JDialog introduce = null, play = null;
JLabel label4, label5;
MineGame() {
mineArea = new MineArea(16, 16, 40, 2);
add(mineArea, BorderLayout.CENTER); // 边框布局
bar = new JMenuBar();
fileMenu1 = new JMenu("游戏");
初级 = new JMenuItem("初级");
中级 = new JMenuItem("中级");
高级 = new JMenuItem("高级");
自定义 = new JMenuItem("自定义");
扫雷榜 = new JMenuItem("扫雷榜");
fileMenu1.add(初级);
fileMenu1.add(中级);
fileMenu1.add(高级);
fileMenu1.add(自定义);
fileMenu1.add(扫雷榜);
fileMenu2 = new JMenu("帮助");
介绍 = new JMenuItem("介绍");
玩法 = new JMenuItem("玩法");
fileMenu2.add(介绍);
fileMenu2.add(玩法);
bar.add(fileMenu1);
bar.add(fileMenu2);
setJMenuBar(bar); // 设置窗体的菜单栏
初级.addActionListener(this);
中级.addActionListener(this);
高级.addActionListener(this);
自定义.addActionListener(this);
扫雷榜.addActionListener(this);
介绍.addActionListener(this);
玩法.addActionListener(this);
hashtable = new Hashtable();
hashtable.put("初级", "初级#" + 999 + "#匿名");
hashtable.put("中级", "中级#" + 999 + "#匿名");
hashtable.put("高级", "高级#" + 999 + "#匿名");
if (!英雄榜.exists()) {
try {
FileOutputStream out = new FileOutputStream(英雄榜);
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(hashtable);
objectOut.close();
out.close();
} catch (IOException e) {
}
}
showHeroRecord = new ShowRecord(this, hashtable);
setBounds(300, 100, 480, 560); // 移动组件并调整大小
setVisible(true); // 使Window可见
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭Window的同时关闭资源
validate(); // 再次布置子组件
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == 初级) {
mineArea.initMineArea(9, 9, 10, 1);
setBounds(300, 100, 270, 350);
}
if (e.getSource() == 中级) {
mineArea.initMineArea(16, 16, 40, 2);
setBounds(300, 100, 480, 560);
}
if (e.getSource() == 高级) {
mineArea.initMineArea(16, 30, 99, 3);
setBounds(100, 100, 900, 560);
}
if (e.getSource() == 自定义) {
set = new JDialog();
set.setTitle("自定义难度");
set.setBounds(300,100,300,130);
set.setResizable(false);//设置大小不可变
set.setModal(true);//设置为对话框模式
panel = new JPanel();
//panel.setLayout(new BorderLayout());
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
label = new JLabel("请输入行列数与地雷数:", JLabel.CENTER);
label1 = new JLabel("行:", JLabel.CENTER);
label2 = new JLabel("列:", JLabel.CENTER);
label3 = new JLabel("地雷数:", JLabel.CENTER);
row = new JTextField();
row.setText("16");
row.setSize(1, 6);
column = new JTextField();
column.setText("16");
mine = new JTextField();
mine.setText("40");
确认 = new JButton("确认");
确认.addActionListener(this);
取消 = new JButton("取消");
取消.addActionListener(this);
panel1.add(label1);
panel1.add(row);
panel2.add(label2);
panel2.add(column);
panel3.add(label3);
panel3.add(mine);
panel4.add(确认);
panel4.add(取消);
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
set.add(label, BorderLayout.NORTH);
set.add(panel, BorderLayout.CENTER);
set.add(panel4, BorderLayout.SOUTH);
set.setVisible(true);
}
if (e.getSource() == 扫雷榜) {
if (showHeroRecord != null)
showHeroRecord.setVisible(true);
}
if (e.getSource() == 确认) {
int rowNum = Integer.parseInt(row.getText());
int columnNum = Integer.parseInt(column.getText());
int mineNum = Integer.parseInt(mine.getText());
if(rowNum < 9)
rowNum = 9;
if(rowNum > 16)
rowNum = 16;
if(columnNum < 9)
columnNum = 9;
if(columnNum > 30)
columnNum = 30;
if(mineNum < 10)
mineNum = 10;
if(mineNum > 99)
mineNum = 99;
mineArea.initMineArea(rowNum,
columnNum, mineNum, 4);
setBounds(100, 100, columnNum * 30, rowNum * 30 + 80);
set.setVisible(false);
}
if (e.getSource() == 取消) {
set.setVisible(false);
}
if (e.getSource() == 介绍) {
introduce = new JDialog();
introduce.setTitle("扫雷介绍");
introduce.setBounds(300,100,300,300);
introduce.setResizable(false);
introduce.setModal(true);
label4 = new JLabel();
label4.setSize(280, 250);
label4.setText("<html><body> 扫雷最原始的版本可以追溯到1973年"
+ "一款名为“方块”的游戏。不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国"
+ "海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。"
+ "两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。"
+ "1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows3.1系统上加载了该游戏,"
+ "扫雷游戏才正式在全世界推广开来。</body></html>");
introduce.add(label4);
introduce.setVisible(true);
}
if (e.getSource() == 玩法) {
play = new JDialog();
play.setTitle("游戏玩法");
play.setBounds(300,100,300,300);
play.setResizable(false);
play.setModal(true);
label4 = new JLabel();
label4.setSize(280, 250);
label4.setText("<html><body> 扫游戏目标是在最短的时间内"
+ "根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。<br> "
+ " 当玩家点开一个格子时,会在该格子上显示周围8个格子的雷数"
+ "(如果没有雷则自动点开周围的格子),玩家需要通过这些数字来判断雷的位置,"
+ "将是雷的格子标记为小红旗。当所有地雷被标记且非雷格子都被点开时游戏胜利。</body></html>");
play.add(label4);
play.setVisible(true);
}
validate();
}
public static void main(String args[]) {
new MineGame();
}
}
MineArea.java
package cn.itbaizhan.mine;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MineArea extends JPanel implements ActionListener, MouseListener {
JButton reStart;
Block[][] block;
BlockView[][] blockView;
LayMines lay;
int row, colum, mineCount, markMount;// 雷区的行数、列数以及地雷个数和用户给出的标记数
ImageIcon mark;
int grade; // 初、中、高级
JPanel pCenter, pNorth;
JTextField showTime, showMarkedMineCount; // 显示用时以及标记数
Timer time; // 计时器
int spendTime = 0;
Record record;
JDialog lose = new JDialog();
JPanel panel;
JLabel str;
JButton restart1 = new JButton("重新开始");
JButton cancel = new JButton("取消");
public MineArea(int row, int colum, int mineCount, int grade) {
reStart = new JButton("重新开始");
mark = new ImageIcon("mark.png"); // 探雷标记
time = new Timer(1000, this);
showTime = new JTextField(5);
showMarkedMineCount = new JTextField(5);
showTime.setHorizontalAlignment(JTextField.CENTER);
showTime.setFont(new Font("Arial", Font.BOLD, 16));
showTime.setDisabledTextColor(java.awt.Color.black); // 设置字体颜色
showTime.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray));// 设置边框颜色
showTime.setEnabled(false);// 设置不能响应用户输入
showMarkedMineCount.setHorizontalAlignment(JTextField.CENTER);
showMarkedMineCount.setFont(new Font("Arial", Font.BOLD, 16));
showMarkedMineCount.setDisabledTextColor(java.awt.Color.black);
showMarkedMineCount.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray));
showMarkedMineCount.setEnabled(false);
pCenter = new JPanel();
pNorth = new JPanel();
lay = new LayMines();
initMineArea(row, colum, mineCount, grade); // 初始化雷区,见下面的LayMines()
reStart.addActionListener(this);
pNorth.add(showMarkedMineCount);
pNorth.add(reStart);
pNorth.add(showTime);
setLayout(new BorderLayout());
add(pNorth, BorderLayout.NORTH);
add(pCenter, BorderLayout.CENTER);
}
public void initMineArea(int row, int colum, int mineCount, int grade) {
pCenter.removeAll();
spendTime = 0;
markMount = mineCount;
this.row = row;
this.colum = colum;
this.mineCount = mineCount;
this.grade = grade;
block = new Block[row][colum];
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++)
block[i][j] = new Block();
}
//lay.layMinesForBlock(block, mineCount);
blockView = new BlockView[row][colum];
pCenter.setLayout(new GridLayout(row, colum));
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
blockView[i][j] = new BlockView();
//blockView[i][j].giveView(block[i][j]); // 给block[i][j]提供视图
pCenter.add(blockView[i][j]);
blockView[i][j].getBlockCover().addActionListener(this);
blockView[i][j].getBlockCover().addMouseListener(this);
blockView[i][j].seeBlockCover();
blockView[i][j].getBlockCover().setEnabled(true);
blockView[i][j].getBlockCover().setIcon(null);
}
}
showMarkedMineCount.setText("" + markMount);
validate();
}
public void initMine(int m, int n){
lay.layMinesForBlock(block, mineCount, m, n);
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
blockView[i][j].giveView(block[i][j]);
}
}
}
public void setRow(int row) {
this.row = row;
}
public void setColum(int colum) {
this.colum = colum;
}
public void setMineCount(int mineCount) {
this.mineCount = mineCount;
}
public void setGrade(int grade) {
this.grade = grade;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == restart1) {
initMineArea(row, colum, mineCount, grade);
lose.dispose();
return;
}
if (e.getSource() == cancel){
lose.dispose();
return;
}
int temp = 0;
if (e.getSource() != reStart && e.getSource() != time) {
time.start();
int m = -1, n = -1;
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
if(block[i][j].getIsMine() == true)
temp = -1;
if (e.getSource() == blockView[i][j].getBlockCover()) {
m = i;
n = j;
}
}
}
if(temp == 0)
initMine(m, n);
if (block[m][n].getIsMine()) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
blockView[i][j].getBlockCover().setEnabled(false);
if (block[i][j].getIsMine())
blockView[i][j].seeBlockNameOrIcon();
}
}
panel = new JPanel();
panel.setLayout(new FlowLayout());
str = new JLabel("你输了哦!", JLabel.CENTER);
//restart1 = new JButton("重新开始");
restart1.addActionListener(this);
//cancel = new JButton("取消");
cancel.addActionListener(this);
lose.setTitle("输了");
lose.setBounds(300,100,200,150);
lose.setResizable(false);
lose.setVisible(false);
lose.setModal(true);
time.stop();
spendTime = 0;
markMount = mineCount;
lose.add(str, BorderLayout.CENTER);
panel.add(restart1);
panel.add(cancel);
lose.add(panel, BorderLayout.SOUTH);
lose.setVisible(true);
} else {
show(m, n); // 见本类后面的show方法
}
}
if (e.getSource() == reStart) {
initMineArea(row, colum, mineCount, grade);
}
if (e.getSource() == time) {
spendTime++;
showTime.setText("" + spendTime);
}
inquireWin();
}
public void show(int m, int n) {
if (block[m][n].getAroundMineNumber() > 0 && block[m][n].getIsOpen() == false) {
blockView[m][n].seeBlockNameOrIcon();
block[m][n].setIsOpen(true);
return;
} else if (block[m][n].getAroundMineNumber() == 0 && block[m][n].getIsOpen() == false) {
blockView[m][n].seeBlockNameOrIcon();
block[m][n].setIsOpen(true);
for (int k = Math.max(m - 1, 0); k <= Math.min(m + 1, row - 1); k++) {
for (int t = Math.max(n - 1, 0); t <= Math.min(n + 1, colum - 1); t++)
show(k, t);
}
}
}
public void mousePressed(MouseEvent e) {
JButton source = (JButton) e.getSource();
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
if (e.getModifiers() == InputEvent.BUTTON3_MASK && source == blockView[i][j].getBlockCover()) {
if (block[i][j].getIsMark()) {
source.setIcon(null);
block[i][j].setIsMark(false);
markMount = markMount + 1;
showMarkedMineCount.setText("" + markMount);
} else {
source.setIcon(mark);
block[i][j].setIsMark(true);
markMount = markMount - 1;
showMarkedMineCount.setText("" + markMount);
}
}
}
}
}
public void inquireWin() {
int number = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < colum; j++) {
if (block[i][j].getIsOpen() == false)
number++;
}
}
if (number == mineCount) {
time.stop();
record = new Record();
switch (grade) {
case 1:
record.setGrade("初级");
break;
case 2:
record.setGrade("中级");
break;
case 3:
record.setGrade("高级");
break;
}
record.setTime(spendTime);
record.setVisible(true);
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
}
LayMines.java
package cn.itbaizhan.mine;
import java.util.*;
import javax.swing.*;
public class LayMines {
ImageIcon mineIcon;
LayMines() {
mineIcon = new ImageIcon("mine.gif");
}
public void layMinesForBlock(Block block[][], int mineCount, int m, int n) {
int row = block.length;
int column = block[0].length;
LinkedList<Block> list = new LinkedList<Block>();
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++)
list.add(block[i][j]);
}
while (mineCount > 0) {
int size = list.size(); // list返回节点的个数
int randomIndex = (int) (Math.random() * size);
Block b = list.get(randomIndex);
if(b != block[m][n]){
b.setIsMine(true); // 设雷
b.setMineIcon(mineIcon);
list.remove(randomIndex); // list删除索引值为randomIndex的节点
mineCount--;
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
if (block[i][j].getIsMine()) {
block[i][j].setIsOpen(false);
block[i][j].setIsMark(false);
} else {
// 不是雷的格计算雷的数目
int mineNumber = 0;
for (int k = Math.max(i - 1, 0); k <= Math.min(i + 1, row - 1); k++) {
for (int t = Math.max(j - 1, 0); t <= Math.min(j + 1, column - 1); t++) {
if (block[k][t].getIsMine())
mineNumber++;
}
}
block[i][j].setIsOpen(false);
block[i][j].setIsMark(false);
block[i][j].setName("" + mineNumber);
block[i][j].setAroundMineNumber(mineNumber);
}
}
}
}
}
BlockView.java
package cn.itbaizhan.mine;
import javax.swing.*;
import java.awt.*;
public class BlockView extends JPanel {
JLabel blockNameOrIcon; // 用来显示Block对象的name、number和mineIcon属性
JButton blockCover; // 用来遮挡blockNameOrIcon.
CardLayout card; // 卡片式布局,显示第一次添加的组件
ImageIcon icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8;
BlockView() {
card = new CardLayout();
setLayout(card);
blockNameOrIcon = new JLabel("", JLabel.CENTER);
blockNameOrIcon.setHorizontalTextPosition(AbstractButton.CENTER);
blockNameOrIcon.setVerticalTextPosition(AbstractButton.CENTER);
blockCover = new JButton();
add("cover", blockCover);
add("view", blockNameOrIcon);
}
public void giveView(Block block) {
if (block.isMine) {
blockNameOrIcon.setIcon(block.getMineicon());
} else {
int n = block.getAroundMineNumber();
if (n == 1) {
icon1 = new ImageIcon("1.jpg");
blockNameOrIcon.setIcon(icon1);
}
if (n == 2) {
icon2 = new ImageIcon("2.jpg");
blockNameOrIcon.setIcon(icon2);
}
if (n == 3) {
icon3 = new ImageIcon("3.jpg");
blockNameOrIcon.setIcon(icon3);
}
if (n == 4) {
icon4 = new ImageIcon("4.jpg");
blockNameOrIcon.setIcon(icon4);
}
if (n == 5) {
icon5 = new ImageIcon("5.jpg");
blockNameOrIcon.setIcon(icon5);
}
if (n == 6) {
icon6 = new ImageIcon("6.jpg");
blockNameOrIcon.setIcon(icon6);
}
if (n == 7) {
icon7 = new ImageIcon("7.jpg");
blockNameOrIcon.setIcon(icon7);
}
if (n == 8) {
icon8 = new ImageIcon("8.jpg");
blockNameOrIcon.setIcon(icon8);
}
else
blockNameOrIcon.setText(" ");
}
}
public void seeBlockNameOrIcon() {
card.show(this, "view"); // 翻转到指定的组件
validate();
}
public void seeBlockCover() {
card.show(this, "cover");
validate();
}
public JButton getBlockCover() {
return blockCover;
}
}
Block.java
package cn.itbaizhan.mine;
import javax.swing.ImageIcon;
public class Block {
String name; // 名字,比如"雷"或数字
int aroundMineNumber; // 周围雷的数目
ImageIcon mineIcon; // 雷的图标
boolean isMine = false; // 是否是雷
boolean isMark = false; // 是否被标记
boolean isOpen = false; // 是否被挖开
public Block() {
super();
}
public Block(String name, int aroundMineNumber, ImageIcon mineIcon, boolean isMine, boolean isMark,
boolean isOpen) {
super();
this.name = name;
this.aroundMineNumber = aroundMineNumber;
this.mineIcon = mineIcon;
this.isMine = isMine;
this.isMark = isMark;
this.isOpen = isOpen;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAroundMineNumber(int n) {
aroundMineNumber = n;
}
public int getAroundMineNumber() {
return aroundMineNumber;
}
public void setMineIcon(ImageIcon icon) {
mineIcon = icon;
}
public ImageIcon getMineicon() {
return mineIcon;
}
public void setIsMine(boolean b) {
isMine = b;
}
public boolean getIsMine() {
return isMine;
}
public void setIsMark(boolean m) {
isMark = m;
}
public boolean getIsMark() {
return isMark;
}
public void setIsOpen(boolean p) {
isOpen = p;
}
public boolean getIsOpen() {
return isOpen;
}
@Override
public String toString() {
return "Block [name=" + name + ", aroundMineNumber=" + aroundMineNumber + ", mineIcon=" + mineIcon + ", isMine="
+ isMine + ", isMark=" + isMark + ", isOpen=" + isOpen + "]";
}
}
Record.java
package cn.itbaizhan.mine;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Record extends JDialog implements ActionListener {
int time = 0;
String grade = null;
String key = null;
String message = null;
JTextField textName;
JLabel label = null;
JButton 确定, 取消;
public Record() {
setTitle("记录你的成绩");
setBounds(300, 300, 240, 160);
setResizable(false); // 设置用户是否可以调整大小
setModal(true); // 设置窗口模式为对话框模式
确定 = new JButton("确定");
取消 = new JButton("取消");
textName = new JTextField(8);
textName.setText("匿名");
确定.addActionListener(this);
取消.addActionListener(this);
setLayout(new GridLayout(2, 1));
label = new JLabel("您现在是...高手,输入您的大名上榜");
add(label);
JPanel p = new JPanel();
p.add(textName);
p.add(确定);
p.add(取消);
add(p);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public void setGrade(String grade) {
this.grade = grade;
label.setText("您现在是" + grade + "高手,输入您的大名上榜");
}
public void setTime(int time) {
this.time = time;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == 确定) {
message = grade + "#" + time + "#" + " " + textName.getText();
key = grade;
writeRecord(key, message);
setVisible(false);
}
if (e.getSource() == 取消) {
setVisible(false);
}
}
public void writeRecord(String key, String message) {
File f = new File("英雄榜.txt");
try {
// 取出原有记录,更新记录
FileInputStream in = new FileInputStream(f);
ObjectInputStream object_in = new ObjectInputStream(in);
Hashtable hashtable = (Hashtable) object_in.readObject();
object_in.close();
in.close();
String temp = (String) hashtable.get(key);
StringTokenizer fenxi = new StringTokenizer(temp, "#"); // 按分隔符分隔成一个个标记
fenxi.nextToken(); // 返回下一个标记
int n = Integer.parseInt(fenxi.nextToken());
if (time < n) {
hashtable.put(key, message);
FileOutputStream out = new FileOutputStream(f);
ObjectOutputStream object_out = new ObjectOutputStream(out);
object_out.writeObject(hashtable);
object_out.close();
out.close();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
ShowRecord.java
package cn.itbaizhan.mine;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class ShowRecord extends JDialog implements ActionListener {
File file = new File("英雄榜.txt");
String name = null;
Hashtable hashtable = null;
JButton 显示, 重新记分;
JLabel label初级[], label中级[], label高级[];
public ShowRecord(JFrame frame, Hashtable h) {
setTitle("扫雷榜");
hashtable = h;
setBounds(300, 300, 320, 185);
setResizable(false);
setVisible(false);
setModal(true);
label初级 = new JLabel[3];
label中级 = new JLabel[3];
label高级 = new JLabel[3];
for (int i = 0; i < 3; i++) {
label初级[i] = new JLabel();
label初级[i].setBorder(null); // 设置无边框
label中级[i] = new JLabel();
label中级[i].setBorder(null);
label高级[i] = new JLabel();
label高级[i].setBorder(null);
}
label初级[0].setText("初级");
label初级[1].setText("" + 999);
label初级[1].setText("匿名");
label中级[0].setText("中级");
label中级[1].setText("" + 999);
label中级[1].setText("匿名");
label高级[0].setText("高级");
label高级[1].setText("" + 999);
label高级[1].setText("匿名");
JPanel pCenter = new JPanel();
pCenter.setLayout(new GridLayout(3, 3));
for (int i = 0; i < 3; i++)
pCenter.add(label初级[i]);
for (int i = 0; i < 3; i++)
pCenter.add(label中级[i]);
for (int i = 0; i < 3; i++)
pCenter.add(label高级[i]);
pCenter.setBorder(BorderFactory.createTitledBorder("扫雷榜"));
显示 = new JButton("最佳成绩");
重新记分 = new JButton("重新记分");
显示.addActionListener(this);
重新记分.addActionListener(this);
JPanel pSouth = new JPanel();
pSouth.setLayout(new FlowLayout(FlowLayout.RIGHT));
pSouth.add(重新记分);
pSouth.add(显示);
add(pCenter, BorderLayout.CENTER);
add(pSouth, BorderLayout.SOUTH);
}
public void readAndShow() {
try {
FileInputStream in = new FileInputStream(file);
ObjectInputStream object_in = new ObjectInputStream(in);
hashtable = (Hashtable) object_in.readObject();
object_in.close();
in.close();
String temp = (String) hashtable.get("初级");
StringTokenizer fenxi = new StringTokenizer(temp, "#");
label初级[0].setText(fenxi.nextToken());
label初级[1].setText(fenxi.nextToken());
label初级[2].setText(fenxi.nextToken());
temp = (String) hashtable.get("中级");
fenxi = new StringTokenizer(temp, "#");
label中级[0].setText(fenxi.nextToken());
label中级[1].setText(fenxi.nextToken());
label中级[2].setText(fenxi.nextToken());
temp = (String) hashtable.get("高级");
fenxi = new StringTokenizer(temp, "#");
label高级[0].setText(fenxi.nextToken());
label高级[1].setText(fenxi.nextToken());
label高级[2].setText(fenxi.nextToken());
} catch (Exception e) {
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == 重新记分) {
hashtable.put("初级", "初级#" + 999 + "#匿名");
label初级[0].setText("初级");
label初级[1].setText("" + 999);
label初级[2].setText("匿名");
hashtable.put("中级", "中级#" + 999 + "#匿名");
label中级[0].setText("中级");
label中级[1].setText("" + 999);
label中级[2].setText("匿名");
hashtable.put("高级", "高级#" + 999 + "#匿名");
label高级[0].setText("高级");
label高级[1].setText("" + 999);
label高级[2].setText("匿名");
try {
FileOutputStream out = new FileOutputStream(file);
ObjectOutputStream object_out = new ObjectOutputStream(out);
object_out.writeObject(hashtable);
object_out.close();
out.close();
} catch (IOException event) {
}
setVisible(false);
}
if (e.getSource() == 显示) {
readAndShow();
}
}
}