📄 matchdialog.java
字号:
package ergo.ui;
// $Id: MatchDialog.java,v 1.3 1999/08/13 01:20:09 sigue Exp $
/*
* Copyright (C) 1999 Carl L. Gay and Antranig M. Basman.
* See the file copyright.txt, distributed with this software,
* for further information.
*/
import ergo.server.*;
import ergo.util.*;
import ergo.logic.*;
import ergo.*;
import java.awt.*;
import java.awt.event.*;
/**
* For entering all the parameters for a server game.
*/
public class MatchDialog extends ErgoDialog implements ActionListener {
private boolean done = false;
private ServerConnection conn = null;
private Panel topPanel = new Panel();
private Panel bottomPanel = new Panel();
private TextField opponentName = new TextField(15);
private TextField komi = new TextField("5.5", 5);
private TextField initialTime = new TextField("15", 5);
private TextField byoTime = new TextField("15", 5);
private TextField size = new TextField("19", 5);
private Button doneButton = new Button("Done");
private Button cancelButton = new Button("Cancel");
private Button declineButton = new Button("Decline");
private Choice myColor = new Choice();
private Choice handicapChooser = new Choice();
private String username = null;
MatchDialog (Frame frame, boolean enableDecline) {
super(frame, "Match", false);
doneButton.addActionListener(this);
cancelButton.addActionListener(this);
if (enableDecline)
declineButton.addActionListener(this);
myColor.addItem("Black");
myColor.addItem("White");
for (int i = 0; i <= 9; i++)
handicapChooser.addItem((i == 0) ? "None" : "" + i);
handicapChooser.select(0);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
Label label;
topPanel.setLayout(gridbag);
// opponent row
label = new Label("Opponent Name:");
c.anchor = GridBagConstraints.EAST;
c.gridwidth = 2;
c.gridx = 0;
c.gridy = 0;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
gridbag.setConstraints(opponentName, c);
topPanel.add(opponentName);
// my color row
label = new Label("My color:");
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 1;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(myColor, c);
topPanel.add(myColor);
// board size row
label = new Label("Board Size:");
c.gridwidth = 2;
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(size, c);
topPanel.add(size);
// initial time row
label = new Label("Initial Time:");
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(initialTime, c);
topPanel.add(initialTime);
label = new Label("minutes");
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
// byo-yomi time row
label = new Label("Byo-yomi:");
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 4;
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(byoTime, c);
topPanel.add(byoTime);
label = new Label("minutes");
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
// Komi row
label = new Label("Komi:");
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 5;
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(komi, c);
topPanel.add(komi);
komi.setEnabled(false);
// handicap row
label = new Label("Handicap:");
c.anchor = GridBagConstraints.EAST;
c.gridx = 0;
c.gridy = 6;
c.gridwidth = 2;
gridbag.setConstraints(label, c);
topPanel.add(label);
c.anchor = GridBagConstraints.WEST;
c.gridx = GridBagConstraints.RELATIVE;
c.gridwidth = 1;
gridbag.setConstraints(handicapChooser, c);
topPanel.add(handicapChooser);
handicapChooser.setEnabled(false);
add("North", topPanel);
// Set up the bottom panel (Done and Cancel buttons).
bottomPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
bottomPanel.add(doneButton);
if (enableDecline)
bottomPanel.add(declineButton);
bottomPanel.add(cancelButton);
add("South", bottomPanel);
//Initialize this dialog to its preferred size.
if (Util.isWindows())
setSize(350, 220); // pack() doesn't work in Java for Windows?
else
pack();
}
// Which field will get the initial focus when the dialog
// is opened. This overrides the method in ErgoDialog.
public Component getInitialFocus () {
if (opponentName.getText().trim().equals(""))
return opponentName;
else
return doneButton;
}
public String matchCommandString () {
return ("match " + opponentName() + " " + myColor() + " "
+ boardSize() + " " + initialTime() + " " + byoTime());
}
public String cgobanTellString () {
return ("tell " + opponentName()
+ " CLIENT: <Ergo " + Ergo.version()
+ "> match " + username
+ " wants handicap " + handicap()
+ ", komi " + komi());
}
public void open (ServerConnection sc) {
open(sc, null, null, null, null, null, null);
}
public void open (ServerConnection sc, String username, String opponent,
String color, String boardsize, String time,
String byotime) {
conn = sc;
this.username = username;
if (opponent != null)
opponentName.setText(opponent);
if (color != null) {
String c = color.trim();
myColor.select(c.equals("B") ? "Black" : "White");
}
if (boardsize != null) {
String bs = boardsize.trim();
size.setText(bs);
}
if (time != null) initialTime.setText(time.trim());
if (byotime != null) byoTime.setText(byotime.trim());
open();
}
private String opponentName () {
String text = opponentName.getText().trim();
return text.equals("") ? "?" : text;
}
public void setOpponent (String oppname) {
opponentName.setText(oppname);
}
private String myColor () {
return myColor.getSelectedItem().substring(0, 1);
}
private String komi () {
String s = komi.getText().trim();
return (s.equals("") ? "5.5" : s);
}
// This is needed to handle komi requests sent by Ergo and
// CGoban in a tell which arrives after the match request.
public void setKomi (String k) {
if (k != null)
komi.setText(k);
}
private String handicap () {
String hcap = handicapChooser.getSelectedItem();
return (hcap.equalsIgnoreCase("None") ? "0" : hcap);
}
public void setHandicap (int hcap) {
handicapChooser.select(hcap);
}
private String boardSize () {
return size.getText().trim();
}
private String initialTime () {
String s = initialTime.getText().trim();
return s.equals("") ? "20" : s;
}
private String byoTime () {
String s = byoTime.getText().trim();
return s.equals("") ? "20" : s;
}
public void actionPerformed (ActionEvent event) {
String cmd = event.getActionCommand();
if ("cancel".equalsIgnoreCase(cmd)) {
done = true;
close();
}
else if ("done".equalsIgnoreCase(cmd)) {
done = true;
close();
if (conn != null) {
conn.send(matchCommandString());
// +++ Don't send this until we finish implementing it.
// conn.send(cgobanTellString());
}
}
else if ("decline".equalsIgnoreCase(cmd)) {
done = true;
close();
if (conn != null)
conn.send("decline " + opponentName());
}
}
} // end class MatchDialog
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -