📄 chatfrm.java
字号:
/********************************************************************
ChatFrm.java
包含 ChatFrm 类,LogonFrm 类,PlayOnNetFrm类
*********************************************************************
*/
import java.awt.*;
import java.io.*;
//import Othello;
//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;
Button m_bClear;
String m_name; //自己的名字
Label m_label=new Label("聊天室成员");
Othello main;
boolean m_playing;
public ChatFrm(Othello _m)
{
main = _m;
this.setSize(500,400);
this.setBackground(Color.gray);
setLayout(null);
m_input = new TextField();
m_text = new TextArea("",1,1,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("密谈");
m_bClear= new Button("清除聊天记录");
m_input.setBounds(20,330,350,25);
m_text.setBounds(20,40,350,250);
m_obj.setBounds(130,300,100,20);
m_label.setBounds(40,300,100,20);
m_bHide.setBounds(400,40,70,25);
m_bDisconnect.setBounds(400,80,70,25);
m_bSend.setBounds(400,330,70,25);
m_bReconnect.setBounds(400,120,70,25);
m_bPlayOnNet.setBounds(400,160,70,25);
m_bClear.setBounds(400,200,70,25);
m_secret.setBounds(280,300,70,20);
Color c = new Color(192,192,192);
m_text.setEditable(false);
this.setBackground(c);
c = new Color(255,255,225);
m_text.setBackground(c);
c = new Color(111,111,183);
m_text.setForeground(c);
this.setResizable(false);
add(m_input);
add(m_text);
add(m_obj);
add(m_label);
add(m_bSend);
add(m_bDisconnect);
add(m_bHide);
add(m_bReconnect);
add(m_bPlayOnNet);
add(m_secret);
add(m_bClear);
Font font = new Font("Arial",Font.PLAIN,14);
m_text.setFont(font);
m_input.setFont(font);
m_bDisconnect.setEnabled(false);
m_bPlayOnNet.setEnabled(false);
this.setTitle("网络 --- 未链接");
m_playing = false;
}
public boolean handleEvent(Event event)
{
if (event.id ==Event.WINDOW_DESTROY)
{
this.setVisible(false);
}
return super.handleEvent(event);
}
public boolean keyDown(Event e,int key)
{
if (key == '\n' ) OnInput();
return super.keyDown (e,key);
}
public boolean action(Event event,Object obj)
{
if ( obj== "隐藏窗口" )
{
this.setVisible(false);
}
else
if ( obj=="清除聊天记录")
{
m_text.setText("");
}
else
if ( obj =="断开链接" )
{
main.chat.OnDisconnect();
}
else
if ( obj == "发送" )
{
OnSend();
}
else
if ( obj == "重新链接" )
{
OnReconnect();
}
else
if (obj == "网络对战" )
{
OnPlayOnNet();
}
return super.action(event,obj);
}
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.chat.m_name + "> 对 <" + obj + "> 说 :" + input ;
if (main.m_socket != null ) main.m_socket.Send(22,obj,input);
}
else
{
//非密谈
input = "<" + main.chat.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.chat.m_bDisconnect.setEnabled(true);
main.chat.m_bReconnect.setEnabled(false);
main.chat.m_bPlayOnNet.setEnabled(true);
this.setTitle("网络 --- " + 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 Ok;
Button Cancel;
ChatFrm main;
public LogonFrm(Frame parent)
{
super(parent,true);
main = (ChatFrm)parent;
setLayout(null);
getname = new TextField();
Ok = new Button("确定");
Cancel = new Button("取消");
label1 = new Label("你的名字是");
setBounds(200,260,220,180 );
getname.setBounds(40,70,150,25);
Ok.setBounds(40,120,70,25);
Cancel.setBounds(110,120,70,25);
label1.setBounds(40,40,100,25);
add(getname);
add(Ok);
add(Cancel);
add(label1);
Color c = new Color(192,192,192);
this.setBackground(c);
this.setTitle("登录");
this.setResizable(false);
this.show();
}
public boolean action(Event event,Object obj)
{
if( obj == "确定" )
{
if(!(getname.getText()).equals ( "") )
{
main.m_name = getname.getText();
this.dispose();
}
else MessageBox.createMessageBox("请先输入一个名字","登录失败");
}
if (obj == "取消")
{
main.m_name = null;
this.dispose();
}
return super.action(event,obj);
}
public boolean handleEvent(Event event)
{
if (event.id ==Event.WINDOW_DESTROY)
{
main.m_name = null;
this.hide();
}
return super.handleEvent(event);
}
}
// 对战挑战窗口
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);
parent = _parent;
this.setBounds (300,200,290,220);
setLayout(null);
Color c;
c = new Color(192,192,192);
this.setBackground(c);
this.setResizable(false);
this.setTitle( "挑战 !!");
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("执白后行");
label.setBounds(40,50,20,20);
player.setBounds(60,50,100,30);
label2.setBounds(170,50,80,20);
m_bOk.setBounds(50,150,70,25);
m_bCancel.setBounds(160,150,70,25);
black.setBounds(60,80,100,25);
white.setBounds(60,110,100,25);
black.setCheckboxGroup(hand);
white.setCheckboxGroup(hand);
black.setState(true);
add(label);
add(player);
add(label2);
add(m_bOk);
add(m_bCancel);
add(black);
add(white);
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();
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY)
{
this.dispose();
}
return super.handleEvent(e);
}
public boolean action (Event e, Object obj)
{
if(obj == "决定")
{
if (MessageBox.createMessageBox("你决定向 " + this.player.getSelectedItem()
+ " 挑战么 ? " , "挑战 !! " ,1))
{
ChatFrm p = (ChatFrm)parent;
if(black.getState())
{
p.main.m_socket.Send(7,player.getSelectedItem(),p.m_name);
p.main.rival_side = p.main.WHITE;
}
else
{
p.main.m_socket.Send(8,player.getSelectedItem(),p.m_name);
p.main.rival_side = p.main.BLACK;
}
p.main.rival = player.getSelectedItem();
this.dispose();
}
else return super.action(e,obj);
}
else
if( obj == "放弃")
{
this.dispose();
}
return super.action(e,obj);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -