?? 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 + -