package MainWindow;
/*************************MainWindow**********************/
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
//抽象类,不能用于构造方法创建对象
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Point;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
//负责创建标签对象,标签用来显示信息,但没有编辑功能
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField; //利用import引用各类包
public class MainWindow extends Frame implements Runnable {
Go panelGo = new Go(); // 用Go类声明并创建一个panelGo对象
Image myImage;
int PORT;
Socket sendSocket; // 主动连接Socket
PrintWriter writer; // 用来发送message
boolean stopFlag;
boolean isInitiative;
Point messagePoint;
Point goStartPoint = null; // 初始化
Point yellowPoint = null;
boolean stepColor = true;
Point LastPoint = null; // 移除黄点时,判断位置变动
BorderLayout borderLayout1 = new BorderLayout(); // 用BorderLayout布局
Panel panel1 = new Panel(); // 创建面板
Panel panel2 = new Panel();
BorderLayout borderLayout2 = new BorderLayout();
Panel panel3 = new Panel();
CheckboxGroup checkboxGroup1 = new CheckboxGroup(); // 选项框
Checkbox checkbox1 = new Checkbox(); // 声明创建Checkbox类的对象
Checkbox checkbox2 = new Checkbox();
Label label1 = new Label();
TextField textField1 = new TextField();
Button button1 = new Button();
Label label2 = new Label();
Choice choice1 = new Choice();
Button button2 = new Button();
GridLayout gridLayout1 = new GridLayout(); // 利用GridLayout布局
BorderLayout borderLayout3 = new BorderLayout();
public MainWindow() // 构造MainWindow方法
{
try {
jbInit(); // 可能发生异常的语句
} catch (Exception e) {
e.printStackTrace();
} // 异常处理
}
private void jbInit() throws Exception // 用关键字throws声明抛出异常
{
choice1.setBackground(new Color(236, 190, 120)); // 设置棋盘底色
button1.setBackground(new Color(236, 190, 120));
this.setResizable(false);
new Thread(this).start(); // 启动监听线程
this.PORT = 1976;
this.isInitiative = false; // 是否主动连接
this.stopFlag = false; // 是否继续监听的标志
this.choice1.addItem("黑");
this.choice1.addItem("白");
LastPoint = new Point();
messagePoint = new Point();
this.setSize(470, 450);
this.setTitle("围棋程序 作者:admin"); // 设置标题
this.panelGo.setEnabled(false); // 开始之前屏蔽掉盘面
checkbox1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
checkbox1_mouseClicked(e);
}
}); // 获取监听器
this.goStartPoint = this.panelGo.getLocation(); //
this.setLayout(borderLayout1); // 设置背景布局
panel1.setLayout(borderLayout2);
checkbox1.setCheckboxGroup(checkboxGroup1);
checkbox1.setLabel("单机");
checkbox2.setCheckboxGroup(checkboxGroup1);
checkbox2.setLabel("联机"); // 设置名为联机的复选框
checkbox2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
checkbox2_mouseClicked(e);
}
}); // 获取监听器
label1.setText("对方地址");//
button1.setLabel("连接"); // 设置名为连接的按钮
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
}); // 告诉监听器所发生的事件,并执行方法
label2.setText(" ");
button2.setBackground(new Color(236, 190, 120));
button2.setLabel("开始"); // 设置名为开始的按钮
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
}); //
panel3.setLayout(gridLayout1); // 设置布局
gridLayout1.setRows(8);
gridLayout1.setColumns(1);
gridLayout1.setHgap(100);
gridLayout1.setVgap(10); //
panel2.setLayout(borderLayout3); //
this.panel2.setSize(500, 70); //
panelGo.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
panelGo_mouseMoved(e);
}
}); // 获取监听器
panelGo.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
panelGo_mouseClicked(e);
}
}); // 获取监听器
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent e) {
this_windowClosing(e);
}
}); // 获取监听器
panel3.setBackground(new Color(236, 190, 120)); // 设置背景颜色
// 初始化创建的对象
panel3.add(checkbox1, null);
panel3.add(checkbox2, null);
panel3.add(label1, null);
panel3.add(textField1, null);
panel3.add(button1, null);
panel3.add(choice1, null);
panel3.add(button2, null);
panel3.add(label2, null);
this.panel1.add(this.panelGo, BorderLayout.CENTER); // 将panelGo添加到BorderLayout布局的中间
this.panel1.add(panel3, BorderLayout.EAST); // 将pane13添加到BorderLayout布局的东区域
this.add(panel2, BorderLayout.SOUTH); // 将pane12添加到BorderLayout布局的南区域
this.add(panel1, BorderLayout.CENTER); // 将pane13添加到BorderLayout布局的中间
this.disableLink(); // 废掉控件
this.checkboxGroup1.setSelectedCheckbox(this.checkbox1); // 如果复选框处于选中状态该方法返回true,否则返回false
this.yellowPoint = new Point(1000, 1000); // 初始化一个世纪外的黄点
this.centerWindow();
loginDialog(this); // 调用loginDialog方法传进参数this
}
/************ 用户登录界面 ************/
private JDialog login; // 声明一个私有类变量
private void loginDialog(final Frame frame) {
login = new JDialog();
login.setTitle("登录"); // 设置标题
login.setLayout(new FlowLayout()); // 利用流布局来设置窗口的布局
login.add(new JLabel("用户名:")); // 添加标签为用户名的对象
final JTextField name = new JTextField(10); // 设置文本框中字符不得超过10个
login.add(name);
login.add(new JLabel("密 码:"));
final JPasswordField password = new JPasswordField(10); // 设置密码框中字符不得多于10个
password.setEchoChar('*'); // 设置显示密码对应的字符为*
login.add(password);
JButton confirm = new JButton("登录"); // 定义一个登录按钮
confirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (compareUserData(name.getText().trim(),
new String(password.getPassword()))) {
login.setVisible(false);
frame.show();
myImage = frame.createImage(16, 16);// 用来纪录有黄点之前的图像
} else {
JOptionPane.showMessageDialog(login, "用户名或密码错误!", "错误提示",
JOptionPane.ERROR_MESSAGE);
}
}
}); // 获取监听器,并执行事件
login.add(confirm);
final JDialog regDialog = new JDialog(login, "注册", true); // 定义一个对象,该对象无法被继承
registerDialog(regDialog);
JButton register = new JButton("注册"); // 设置注册的按钮
register.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
regDialog.setVisible(true);
}
}); // 获取监听器,执行regDialog为可见
login.add(register);
login.setSize(200, 130);
login.setResizable(false);
login.setLocationRelativeTo(null);
login.setVisible(true); // 确保窗体里面的组件可见
}
private boolean compareUserData(String nam