java_day14
目标:Java web开发
ChineseChess.java解析完毕,象棋程序累计解析\(1/8\)



package cn.edu.ouc.chineseChess;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.LinkedList;
/**
* 象棋主类
*
* @author cnlht
*/
public class ChineseChess extends JFrame implements ActionListener {
ChessBoard board = null;
Demon demon = null;
MakeChessManual record = null;
Container con = null;
JMenuBar bar;//菜单条
JMenu fileMenu;//菜单
JMenuItem 制作棋谱, 保存棋谱, 演示棋谱;//菜单项
//菜单项放在菜单里,菜单放在菜单条里
JFileChooser fileChooser = null;//文件选择器,打开文件,保存文件
LinkedList 棋谱 = null;
public ChineseChess() {
bar = new JMenuBar();
fileMenu = new JMenu("中国象棋");
制作棋谱 = new JMenuItem("制作棋谱");
保存棋谱 = new JMenuItem("保存棋谱");
保存棋谱.setEnabled(false);//设置按钮不可点击
演示棋谱 = new JMenuItem("演示棋谱");
fileChooser = new JFileChooser();
fileMenu.add(制作棋谱);
fileMenu.add(保存棋谱);
fileMenu.add(演示棋谱);
bar.add(fileMenu);
setJMenuBar(bar);
setTitle(制作棋谱.getText());
制作棋谱.addActionListener(this);//将三个按钮加入到一个监听器以监听事件源产生的事件。this是事件源
保存棋谱.addActionListener(this);
演示棋谱.addActionListener(this);
board = new ChessBoard(45, 45, 9, 10);
record = board.record;
con = getContentPane();
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true,
board, record);//创建一个就具有指定方向,能连续重新显示组件和具有指定组件的分割板
split.setDividerSize(5);//设置分割条的大小
split.setDividerLocation(460);//设置分割条的位置
con.add(split, BorderLayout.CENTER);
// addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// System.exit(0);
// }
// });对Windows窗口关闭程序进行重写
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(60, 20, 690, 540);//相当于这两行代码:setSize(690,540);setLocation(60,20);
}
public void actionPerformed(ActionEvent e){
//当用户点击按钮时,程序调用actionPerformed方法,通过if语句来判断是哪一个按钮被点击,然后在对话框中显示相应的内容。
if (e.getSource() == 制作棋谱) {
con.removeAll();//去掉所有组件,不清除布局
保存棋谱.setEnabled(true);
this.setTitle(制作棋谱.getText());
board = new ChessBoard(45, 45, 9, 10);
record = board.record;
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
true, board, record);
split.setDividerSize(5);
split.setDividerLocation(460);
con.add(split, BorderLayout.CENTER);
validate();//重新绘制
}
if (e.getSource() == 保存棋谱) {
int state = fileChooser.showSaveDialog(null);
File saveFile = fileChooser.getSelectedFile();
if (saveFile != null && state == JFileChooser.APPROVE_OPTION) {
try {
FileOutputStream outOne = new FileOutputStream(saveFile);
ObjectOutputStream outTwo = new ObjectOutputStream(outOne);
outTwo.writeObject(record.获取棋谱());
outOne.close();
outTwo.close();
} catch (IOException event) {
}
}
}
if (e.getSource() == 演示棋谱) {
con.removeAll();
con.repaint();
con.validate();
validate();
保存棋谱.setEnabled(false);
// fileChooser.setCurrentDirectory(new File("D:\\codes"));
// fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int state = fileChooser.showOpenDialog(null);//显示文件导航框,返回值有三个CANCEL,APPROVE,ERROR
File openFile = fileChooser.getSelectedFile();//获取文件
if (openFile != null && state == JFileChooser.APPROVE_OPTION) {
try {
FileInputStream inOne = new FileInputStream(openFile);//文件输入
ObjectInputStream inTwo = new ObjectInputStream(inOne);
棋谱 = (LinkedList) inTwo.readObject();
inOne.close();
inTwo.close();
ChessBoard board = new ChessBoard(45, 45, 9, 10);
demon = new Demon(board);
demon.set棋谱(棋谱);
con.add(demon, BorderLayout.CENTER);
con.validate();
validate();
this.setTitle(演示棋谱.getText() + ":" + openFile);
} catch (Exception event) {//异常处理方法————try,catch
JLabel label = new JLabel("不是棋谱文件");
label.setFont(new Font("隶书", Font.BOLD, 60));
label.setForeground(Color.red);
label.setHorizontalAlignment(SwingConstants.CENTER);
con.add(label, BorderLayout.CENTER);
con.validate();
this.setTitle("没有打开棋谱");
validate();
}
} else {
JLabel label = new JLabel("没有打开棋谱文件呢");
label.setFont(new Font("隶书", Font.BOLD, 50));//new Font(String 字体,int 风格,int 字号);
//风格有三种:Font.PLAIN, Font.BOLD, Font.ITALIC,普通,粗体和斜体
label.setForeground(Color.pink);//设置前景色为粉色
label.setHorizontalAlignment(SwingConstants.CENTER);//水平对齐,居中对其
/*
etHorizontalAlignment:设置水平对齐方式;
它的有效参数是:
SwingConstants.LEFT:左对齐;(默认值,也就是不设置时则左对齐)
SwingConstants.CENTER:居中对齐;
SwingConstants.RIGHT:右对齐;
setVerticalAlignment:设置垂直对齐方式;
它的有效参数是:
SwingConstants.TOP:向上对齐;
SwingConstants.CENTER:居中对齐;(默认值,也就是不设置时居中对齐)
SwingConstants.BOTTOM:向下对齐;
*/
con.add(label, BorderLayout.CENTER);
con.validate();
this.setTitle("没有打开棋谱文件呢");
validate();
}
}
}
public static void main(String args[]) {
new ChineseChess();
}
}
接下来:
ChessBoard board = null;//象棋棋盘类
Demon demon = null;//演示棋谱类
MakeChessManual record = null;//制作棋谱类

浙公网安备 33010602011771号