📄 creatwindow.java
字号:
package view;
import iniset.PropertySet;
import iniset.finals.SetDatas;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import vo.ChessPoint;
import vo.CursorsAndImg;
import vo.Enums;
import vo.sounds.Music;
import vo.sounds.Sound;
import dao.Battel;
import dilog.SysDilog;
/**
* 生成一个窗口,并处理其中的各种按钮事件
*
* @author B.Lee
*
*/
public class CreatWindow extends JFrame {
private final JLabel head = new JLabel(CursorsAndImg.HEAD);
private final JLabel boot = new JLabel(CursorsAndImg.BOOT);
private final JLabel left = new JLabel(CursorsAndImg.LEFT);
private final JLabel right = new JLabel(CursorsAndImg.RIGHT);
private final JLabel toolbar = new JLabel(CursorsAndImg.TOOL_BAR);
private final JLabel playerInf = new JLabel(CursorsAndImg.PLYER_INF);
private final static JTextArea txtOne = new JTextArea();
private final static JTextArea txtTwo = new JTextArea();
private final Battel battel = new Battel(this);
/** 存储各种信息 */
private PropertySet propertySet = PropertySet.getPropertySet();
/** 设置对话框 */
private SysDilog sysDilog = null;
/** 加入滚动栏以便显示全部数据 */
private JScrollPane textPane = null;
/** 用于播放背景音乐的类 */
private Music music;
/** 弹出菜单 */
private JPopupMenu pop = null;
/** 弹出菜单的子菜单 */
private JMenuItem clear = null;
/**
* 构造函数
*
* @param name
* 窗口的名字
*/
public CreatWindow(String name) {
super(name);
setResizable(false);
setSize(1001, 737);
setLayout(null);
sysDilog = SysDilog.getSysDilog(this);
// final SoundSet soundSet = new SoundSet();
this.setIconImage(CursorsAndImg.FIVE.getImage());
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((scrSize.width - getSize().width) / 2,
(scrSize.height - getSize().height) / 2);// 最佳位置
music = new Music();
head.setBounds(0, 0, 724, 85);
boot.setBounds(0, 625, 724, 86);
left.setBounds(0, 85, 92, 540);
battel.setBounds(92, 85, 540, 540);
right.setBounds(632, 85, 92, 540);
toolbar.setBounds(726, 0, 268, 34);
playerInf.setBounds(726, 35, 275, 133);
txtOne.setBounds(726, 170, 268, 200);
txtTwo.setBounds(726, 372, 268, 324);
textPane = new JScrollPane(txtTwo);
textPane.setBounds(726, 372, 268, 324);
textPane
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
textPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
textPane.setWheelScrollingEnabled(true);// 响应鼠标滚轮
txtOne.setBackground(new Color(76, 76, 76));
txtOne.setFont(new Font("楷体", Font.BOLD, 12));
txtOne.setForeground(Color.red);
txtOne.setLineWrap(true); // 换 行
txtOne.setEditable(false);// 不可编辑
final String declare = new String("\n\t免责声明\n\n 该游戏是对腾讯QQ游戏中五"
+ "子棋的一个模拟,其中所用到的图片多数来自腾" + "讯QQ游戏中,图片的所有权归腾讯公司所有\n\n其余部分版权没有,盗版不究");
txtOne.setText(declare);
txtTwo.setBackground(new Color(76, 76, 76));
txtTwo.setFont(new Font("楷体", Font.BOLD, 12));
txtTwo.setForeground(Color.white);
txtTwo.setLineWrap(true); // 自 动 换 行
txtTwo.setEditable(false);// 不可编辑
add(head);
add(boot);
add(left);
add(battel);
add(right);
add(toolbar);
add(playerInf);
add(txtOne);
add(textPane);
pop = new JPopupMenu();
clear = new JMenuItem("清除");
pop.add(clear);
if (propertySet.getMusic() == SetDatas.MUSIC_ON) {
music.play();
}
this.setVisible(true);
if (propertySet.getModel() == SetDatas.PEOPLE_VS_COMPUTER
&& propertySet.getFirst() == SetDatas.WHITE_FIRST) {// 如果是人与电脑对战且白棋先下则电脑下一个棋
getBattel();
getBattel().getchessPoint(new Point(15 / 2, 15 / 2)).setState(
Enums.chessState.WHITE);// 电脑下棋
getBattel().getchessPoint(new Point(15 / 2, 15 / 2)).setIcon(
CursorsAndImg.WHITE_CHESS);
// 加入路径
getBattel().path.offerLast(getBattel().getchPoint()[15 / 2][15 / 2]);
addTxtTwo("电脑下棋: 坐标(7" + ", 7" + ");\n");
}
clear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setTxtTwo("");
}
});
/**
* 右键弹出菜单的事件聆听
*/
txtTwo.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON3) {
System.out.println("弹出菜单");
pop.show((Component) e.getSource(), e.getX(), e.getY());
}
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog(null, "谢谢使用!", "退出游戏",
JOptionPane.WARNING_MESSAGE, CursorsAndImg.OUT);
// soundSet.save();
System.exit(0);
}
});
/**
* 内部类,下方按钮的实现
*/
boot.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
if (x > 102 && x < 144 && y > 22 && y < 41) {// 按在了悔棋上
if (propertySet.getRegret() == SetDatas.UN_REGRET_ABLE) {
JOptionPane.showMessageDialog(null, "当前禁止悔棋,请更改设置");
return;
}
if (getBattel().getEnd()) {// 游戏已经结束了悔棋不可用
return;
} else if (propertySet.getModel() == SetDatas.PEOPLE_VS_COMPUTER) {// 人机对战模式悔棋
ChessPoint pointOfPath = new ChessPoint(Enums.chessState.NONE,
new Point(0, 0));
if (getBattel().path.size() > 2) {// 表示可以悔棋
pointOfPath = getBattel().path.pollLast();
pointOfPath.setState(Enums.chessState.NONE);
pointOfPath.setIcon(CursorsAndImg.NONE_CHESS);
pointOfPath = getBattel().path.pollLast();
pointOfPath.setState(Enums.chessState.NONE);
pointOfPath.setIcon(CursorsAndImg.NONE_CHESS);
addTxtTwo("玩家悔棋,清除棋盘上的两颗棋..\n");
} else {// 不可悔棋
System.out.println("Run Here");
JOptionPane.showMessageDialog(null, "非法悔棋方式! 请查看帮助", "出错啦",
JOptionPane.WARNING_MESSAGE);
}
} else { // 人人对战模式悔棋
ChessPoint pointOfPath = new ChessPoint(Enums.chessState.NONE,
new Point(0, 0));
if (!getBattel().path.isEmpty()) {// 非空表示可以悔棋
pointOfPath = getBattel().path.pollLast();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -