📄 chatfrm.java
字号:
//********************************************************************
//
// ChatFrm.java
//
// 包含 ChatFrm 类,LogonFrm 类,PlayOnNetFrm类
//
//********************************************************************
import java.awt.*;
import java.io.*;
import OthelloPanel;
import java.awt.event.*;
import MessageBox;
import MySocket;
//处理Chat窗口
public class ChatFrm extends Frame
{
TextField m_input; //输入文本框
TextArea m_text; //输出文本框
Choice m_obj; //闲聊对象选择
Checkbox m_secret; //密谈
Button m_bSend;
Button m_bHide;
Button m_bDisconnect;
Button m_bReconnect;
Button m_bPlayOnNet;
String m_name; //自己的名字
OthelloPanel main;
boolean m_playing;
public ChatFrm(OthelloPanel _m)
{
main = _m;
this.setSize(500,400);
this.setBackground(Color.lightGray);
BListener listener = new BListener();
m_input = new TextField();
m_text = new TextArea("",15,50,m_text.SCROLLBARS_VERTICAL_ONLY);
m_obj = new Choice();
m_bSend = new Button("发送");
m_bDisconnect = new Button("断开连接");
m_bHide = new Button("隐藏窗口");
m_bReconnect = new Button("重新连接");
m_bPlayOnNet = new Button("网络对战");
m_secret = new Checkbox("密谈");
this.layoutComponent();
m_bSend.addActionListener(listener);
m_bHide.addActionListener(listener);
m_bReconnect.addActionListener(listener);
m_bDisconnect.addActionListener(listener);
m_bPlayOnNet.addActionListener(listener);
m_input.addActionListener(new TListener());
this.addWindowListener(new WListener());
m_text.setEditable(false);
this.setBackground(Color.lightGray );
Color c = new Color(255,255,225);
m_text.setBackground(c);
c = new Color(111,111,183);
m_text.setForeground(c);
this.setResizable(false);
this.pack();
Font font = new Font("Arial",Font.PLAIN,14);
m_text.setFont(font);
m_input.setFont(font);
m_bDisconnect.setEnabled(false);
m_bPlayOnNet.setEnabled(false);
setTitle("Net --- 未连接");
m_playing = false;
}
public void layoutComponent()
{
Panel panel = new Panel();
GridBagLayout layout = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
panel.setLayout(layout);
panel.setBackground(Color.lightGray);
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridheight = 6;
gbc.gridwidth = 5;
gbc.insets = new Insets(5,5,5,5);
gbc.weightx = 1;
panel.add(m_text,gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.ipadx =10;
gbc.ipady = 3;
gbc.gridx = 5;
gbc.gridy = GridBagConstraints.RELATIVE;
panel.add(m_bHide,gbc);
panel.add(m_bDisconnect,gbc);
panel.add(m_bReconnect,gbc);
panel.add(m_bPlayOnNet,gbc);
gbc.gridx = 1;
gbc.gridy = 7;
panel.add(new Label("你对",Label.RIGHT),gbc);
gbc.gridx = GridBagConstraints.RELATIVE ;
panel.add(m_obj,gbc);
panel.add(new Label("说",Label.LEFT),gbc);
panel.add(m_secret,gbc);
gbc.gridx =1;
gbc.gridy = 8 ;
gbc.gridwidth = 4;
panel.add(m_input,gbc);
gbc.gridx = GridBagConstraints.RELATIVE ;
panel.add(m_bSend,gbc);
this.add(panel);
this.pack();
}
class BListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if ( e.getSource() == m_bHide )
{
setVisible(false);
}
else
if ( e.getSource() == m_bDisconnect )
{
main.m_ChatFrm.OnDisconnect();
}
else
if ( e.getSource() == m_bSend )
{
OnSend();
}
else
if ( e.getSource() == m_bReconnect)
{
OnReconnect();
}
else
if ( e.getSource() == m_bPlayOnNet )
{
OnPlayOnNet();
}
}
}
class WListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
setVisible(false);
}
}
class TListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
OnInput();
}
}
public void OnSend()
{
OnInput();
}
//输入框有输入
public void OnInput()
{
if (! this.m_bDisconnect.isEnabled() )
{
this.m_input.setText("");
return;
}
String input = m_input.getText();
String obj = "";
if( m_secret.getState())
{
//密谈
obj = m_obj.getSelectedItem();
input = "<" + main.m_ChatFrm.m_name + "> 悄悄的对 <" + obj + "> 说 :" + input ;
if (main.m_socket != null ) main.m_socket.Send(22,obj,input);
}
else
{
//非密谈
input = "<" + main.m_ChatFrm.m_name + "> : " + input ;
if (main.m_socket != null ) main.m_socket.Send(20,"",input);
}
input+="\n";
m_text.append(input);
m_input.setText("");
}
//断开连接
public void OnDisconnect()
{
if(main.m_socket != null)
{
main.m_socket.Send(5,"","");
main.m_socket.quit = true;
main.m_socket = null ;
}
}
//重新连接
public void OnReconnect()
{
new LogonFrm(this);
if(m_name != null )
{
main.m_socket = new MySocket(main);
if(main.m_socket.initNet())
{
main.m_socket.start();
main.m_ChatFrm.m_bDisconnect.setEnabled(true);
main.m_ChatFrm.m_bReconnect.setEnabled(false);
main.m_ChatFrm.m_bPlayOnNet.setEnabled(true);
this.setTitle("Net --- " + this.m_name + " --- 连接到 " + main.m_socket.m_socket.getInetAddress());
}
}
}
//网络挑战
public void OnPlayOnNet()
{
new PlayOnNetFrm(this);
}
//关闭窗口
public void dispose()
{
OnDisconnect();
super.dispose();
}
}
// 登陆窗口
class LogonFrm extends Dialog
{
TextField getname;
Label label1;
Button m_bOk;
Button m_bCancel;
ChatFrm main;
public LogonFrm(Frame parent)
{
super(parent,true);
BListener listener = new BListener();
main = (ChatFrm)parent;
getname = new TextField("",15);
m_bOk = new Button("确定");
m_bCancel = new Button("取消");
label1 = new Label("你的名字是:");
m_bOk.addActionListener(listener);
m_bCancel.addActionListener(listener);
this.addWindowListener(new WListener());
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
this.setLayout(gridbag);
gbc.anchor = GridBagConstraints.WEST ;
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.ipady = 5;
gbc.insets = new Insets(5,20,5,20);
gbc.gridy = 0;
gbc.gridx = GridBagConstraints.REMAINDER;
add(label1,gbc);
gbc.anchor = GridBagConstraints.CENTER ;
gbc.weighty = 0;
gbc.weightx = 0;
gbc.gridy = 1;
gbc.ipadx = 10;
gbc.ipady = 5;
add(getname,gbc);
gbc.fill = GridBagConstraints.BOTH;
Panel buttonPanel = new Panel();
gbc.gridy = 2;
add(buttonPanel,gbc);
buttonPanel.setLayout(new GridLayout(1,2,10,10));
buttonPanel.add(m_bOk);
buttonPanel.add(m_bCancel);
this.pack();
Color c = new Color(192,192,192);
this.setBackground(c);
this.setTitle("登陆");
this.setResizable(false);
this.show();
}
class BListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == m_bOk )
{
if(!(getname.getText()).equals ( "") )
{
main.m_name = getname.getText();
dispose();
}
else MessageBox.createMessageBox("请先输入一个名字","登陆失败");
}
if (e.getSource() == m_bCancel)
{
main.m_name = null;
dispose();
}
}
}
class WListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
main.m_name = null;
setVisible(false);
}
}
}
// 对战挑战窗口
class PlayOnNetFrm extends Dialog
{
Choice player;
Button m_bOk;
Button m_bCancel;
Label label;
Label label2;
Othello main;
CheckboxGroup hand;
Checkbox black;
Checkbox white;
Frame parent;
public PlayOnNetFrm(Frame _parent)
{
super(_parent,true);
BListener listener = new BListener();
parent = _parent;
this.setResizable(false);
this.setTitle( "挑战 !!");
GridBagLayout layout = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
this.setLayout(layout);
this.setBackground(Color.lightGray);
label = new Label("向");
label2 = new Label("发出挑战要求");
player = new Choice();
m_bOk = new Button("决定");
m_bCancel = new Button("放弃");
hand = new CheckboxGroup();
black = new Checkbox("执黑先行");
white = new Checkbox("执白后行");
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weightx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(5,15,5,5);
add(label,gbc);
gbc.ipadx = 60;
gbc.gridy = 1;
gbc.weightx = 1;
add(player,gbc);
gbc.ipadx = 0;
add(label2,gbc);
gbc.gridwidth = 3;
gbc.gridy = 2;
gbc.gridx = GridBagConstraints.REMAINDER;
add(black,gbc);
gbc.gridy = 3;
add(white,gbc);
Panel buttonPanel = new Panel();
gbc.gridy = 4;
gbc.gridx = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.NONE;
gbc.ipadx = 40;
gbc.ipady = 5;
add(buttonPanel,gbc);
buttonPanel.setLayout(new GridLayout(1,2));
buttonPanel.add(m_bOk);
buttonPanel.add(m_bCancel);
this.pack();
m_bOk.addActionListener(listener);
m_bCancel.addActionListener(listener);
this.addWindowListener(new WListener());
black.setCheckboxGroup(hand);
white.setCheckboxGroup(hand);
black.setState(true);
ChatFrm p = (ChatFrm)parent;
int i;
for(i=0;i<MySocket.MAXCLIENT;i++)
{
if (p.main.m_socket.m_client[i] != null )
player.add(p.main.m_socket.m_client[i]);
}
this.show();
}
class BListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == m_bOk)
{
if (MessageBox.createMessageBox("你决定向 " + player.getSelectedItem() + " 挑战么 ? " , "挑战 !! " ,1))
{
ChatFrm p = (ChatFrm)parent;
if(black.getState())
{
p.main.m_socket.Send(7,player.getSelectedItem(),p.m_name);
p.main.m_RivalSide = p.main.WHITE;
}
else
{
p.main.m_socket.Send(8,player.getSelectedItem(),p.m_name);
p.main.m_RivalSide = p.main.BLACK;
}
p.main.m_Rival = player.getSelectedItem();
dispose();
}
}
else
if( e.getSource() == m_bCancel)
{
dispose();
}
}
}
class WListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
dispose();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -