📄 localdemo.java
字号:
package org.nebula.games.go;
import org.nebula.media.*;
import org.nebula.cwt.*;
import org.nebula.cwt.grid.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.*;
import java.io.File;
import java.net.URL;
/**
*----------------------------- Local Play --------------------------------------------
*/
public class LocalDemo extends JFrame implements GridListener, ActionListener{
ImageIcon icoSound, icoNoSound, icoShowNum, icoNotShow;
JButton btNew, btOpen, btLoad, btClose, btSave,Undo,btSound,btShowNum, btHelp;
JButton btFirst, btPrevious, btNext, btLast, btPreComment, btNextComment;
JButton btResetComment, btEditComment, btSaveComment;
JButton btCloseVar, btNextSib, btPreSib;
JButton btDelStone;
JToggleButton btAddStone, btTriangle, btSquare, btCircle, btCross, btChar;
JComboBox cboChar;
JTextArea txtComment;
GoBoard board;
DefaultBoardModel boardModel;
// int curPos;
Match match;
Movement root, current;
boolean play_music;
SoundPlayer sp = new SoundPlayer(getResource("/resources/putstone.wav"));
public LocalDemo() {
super("手谈--棋谱演示");
boardModel = new DefaultBoardModel(GoBoardModel.DEFAULT_BOARD_SIZE);
board = new GoBoard(boardModel);
board.addGridListener(this);
btResetComment = createToolButton("reset_comment.gif","重置注解");
btSaveComment = createToolButton("save_comment.gif","保存注解");
btEditComment = createToolButton("edit.gif","编辑注解");
txtComment = new JTextArea();
txtComment.setWrapStyleWord(true);
txtComment.setLineWrap(true);
JPanel infoPad = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.BOTH;
gc.insets = new Insets(5,15,5,15);
infoPad.setLayout(gbl);
GUITools.addComponentTo(infoPad, btResetComment, gbl, gc, 0, 0, 1, 1, 0.0, 0.0);
GUITools.addComponentTo(infoPad, btEditComment, gbl, gc, 1, 0, 1, 1, 0.0, 0.0);
GUITools.addComponentTo(infoPad, btSaveComment, gbl, gc, 2, 0, 1, 1, 0.0, 0.0);
GUITools.addComponentTo(infoPad, new JScrollPane(txtComment), gbl, gc, 0, 1, 3, 1, 0.0, 1.0);
setBackground(Color.lightGray);
getContentPane().setLayout(new BorderLayout());
getContentPane().add("Center", board);
getContentPane().add("East", infoPad);
getContentPane().add("North", createBoardToolBar());
getContentPane().add("South", createDemoToolBar());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
show();
// this.setExtendedState(JFrame.MAXIMIZED_BOTH);
board.setNumberStart(0, 1);
play_music = true;
txtComment.setEditable(false);
txtComment.setEnabled(false);
initDemo(null);
}
private Component createBoardToolBar() {
JButton b;
JToolBar toolbar = new JToolBar();
toolbar.setOrientation(JToolBar.HORIZONTAL);
toolbar.setFloatable(false);
toolbar.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
icoSound = new ImageIcon(getResource("/resources/sound1.gif"));
icoNoSound = new ImageIcon(getResource("/resources/sound2.gif"));
icoShowNum = new ImageIcon(getResource("/resources/shownum1.gif"));
icoNotShow = new ImageIcon(getResource("/resources/shownum2.gif"));
btNew = createToolButton("new.gif","新建棋谱");
btOpen = createToolButton("open.gif","打开棋谱");
btLoad = createToolButton("library.gif","打开棋谱库");
btClose = createToolButton("close.gif","关闭演示");
btSave = createToolButton("save.gif","保存棋谱");
btShowNum = createToolButton("shownum1.gif","棋子序号");
btSound = createToolButton("sound2.gif","音效");
btHelp = createToolButton("help.gif","帮助");
btShowNum.setIcon(icoShowNum);
toolbar.add(btNew);
toolbar.add(btOpen);
toolbar.add(btLoad);
toolbar.add(btClose);
toolbar.add(btSave);
toolbar.add(Box.createHorizontalStrut(5));
toolbar.add(btShowNum);
toolbar.add(btSound);
toolbar.add(Box.createHorizontalStrut(5));
toolbar.add(btHelp);
toolbar.setBorder(BorderFactory.createRaisedBevelBorder());
return toolbar;
}
private Component createDemoToolBar() {
JButton b;
JToolBar toolbar = new JToolBar();
toolbar.setOrientation(JToolBar.HORIZONTAL);
toolbar.setFloatable(false);
toolbar.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
btFirst = createToolButton("first.gif","第一步");
btPrevious = createToolButton("previous.gif","上一步");
btNext = createToolButton("next.gif","下一步");
btLast = createToolButton("last.gif","最后一步");
btPreComment= createToolButton("pre_comment.gif","上次评论");
btNextComment= createToolButton("next_comment.gif","下次评论");
btCloseVar = createToolButton("to_parent.gif","关闭当前参考");
btNextSib = createToolButton("sib_next.gif","下一参考图");
btPreSib = createToolButton("sib_pre.gif","上一参考图");
btSquare = createToolToggleButton("square.gif","标记方块");
btTriangle = createToolToggleButton("triangle.gif","标记三角");
btCircle = createToolToggleButton("circle.gif","标记圆形");
btCross = createToolToggleButton("xxx.gif","标记X");
btChar = createToolToggleButton("char.gif","标记字符");
btAddStone = createToolToggleButton("addstone.gif", "添加棋子");
ButtonGroup group = new ButtonGroup();
group.add(btSquare);
group.add(btTriangle);
group.add(btCircle);
group.add(btCross);
group.add(btChar);
group.add(btAddStone);
cboChar = new JComboBox();
for (int i = 0; i < 26; i++) {
char c = (char) (97 + i);
cboChar.addItem("" + c);
}
cboChar.setMaximumSize(cboChar.getPreferredSize());
btDelStone = createToolButton("sib_del.gif","删除棋子");
toolbar.add(btFirst);
toolbar.add(btPreComment);
toolbar.add(btPrevious);
toolbar.add(btNext);
toolbar.add(btNextComment);
toolbar.add(btLast);
toolbar.add(new JLabel(new ImageIcon(getResource("/resources/separater.gif"))));
toolbar.add(btCloseVar);
toolbar.add(btNextSib);
toolbar.add(btPreSib);
toolbar.add(new JLabel(new ImageIcon(getResource("/resources/separater.gif"))));
toolbar.add(btSquare);
toolbar.add(btTriangle);
toolbar.add(btCircle);
toolbar.add(btCross);
toolbar.add(btChar);
toolbar.add(cboChar);
toolbar.add(btAddStone);
toolbar.add(btDelStone);
toolbar.setBorder(BorderFactory.createRaisedBevelBorder());
return toolbar;
}
private JButton createToolButton(String ico, String tip) {
JButton bt;
bt = new JButton(new ImageIcon(getResource("/resources/" + ico))) {
public float getAlignmentY() { return 0.5f; }
};
bt.setRequestFocusEnabled(false);
bt.setMargin(new Insets(1,1,1,1));
bt.setToolTipText(tip);
bt.addActionListener(this);
return bt;
}
private JToggleButton createToolToggleButton(String ico, String tip) {
JToggleButton bt;
bt = new JToggleButton(new ImageIcon(getResource("/resources/" + ico))) {
public float getAlignmentY() { return 0.5f; }
};
bt.setRequestFocusEnabled(false);
bt.setMargin(new Insets(1,1,1,1));
bt.setToolTipText(tip);
//bt.addActionListener(this);
return bt;
}
public void actionPerformed(ActionEvent e) {
JButton bt = (JButton) e.getSource();
if (bt == btOpen) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(this);
File openFile = chooser.getSelectedFile();
if (openFile != null) {
Match m = QipuManager.readMatchFromFile(openFile.getAbsolutePath(), QipuManager.SGF);
initDemo(m);
}
} else if (bt == btLoad) {
Match m = QipuLibrary.getMatch(new JFrame(), "选择棋谱");
initDemo(m);
} else if (bt == btSave) {
JFileChooser chooser = new JFileChooser();
chooser.showSaveDialog(this);
File saveFile = chooser.getSelectedFile();
if (saveFile.exists()) {
String ss = "文件已存在,覆盖么?";
if (JOptionPane.showConfirmDialog(btSave,ss,"",JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION){
return;
}
}
System.out.println("try to save match......");
QipuManager.saveMatchToFile(match, saveFile.getAbsolutePath(), QipuManager.SGF);
} else if (bt == btShowNum) {
if (board.isShowingNumber()){
board.setShowingNumber(false);
btShowNum.setIcon(icoShowNum);
}
else {
board.setShowingNumber(true);
btShowNum.setIcon(icoNotShow);
}
} else if (bt == btSound) {
if (play_music){
play_music = false;
btSound.setIcon(icoSound);
}
else {
play_music = true;
btSound.setIcon(icoNoSound);
}
} else if (bt == btNext) {
if (current.isLeaf()) {
return;
}
showMovement((Movement) current.getFirstChild());
} else if (bt == btPrevious) {
if (current == root) {
return;
}
undo();
} else if (bt == btCloseVar) {
Movement move = current;
while (move != root) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -