?? chatfrm.java
字號(hào):
//********************************************************************
//
// 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; //閑聊對(duì)象選擇
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("發(fā)送");
m_bDisconnect = new Button("斷開連接");
m_bHide = new Button("隱藏窗口");
m_bReconnect = new Button("重新連接");
m_bPlayOnNet = new Button("網(wǎng)絡(luò)對(duì)戰(zhàn)");
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("你對(duì)",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 + "> 悄悄的對(duì) <" + 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());
}
}
}
//網(wǎng)絡(luò)挑戰(zhàn)
public void OnPlayOnNet()
{
new PlayOnNetFrm(this);
}
//關(guān)閉窗口
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("請(qǐng)先輸入一個(gè)名字","登陸失敗");
}
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);
}
}
}
// 對(duì)戰(zhàn)挑戰(zhàn)窗口
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( "挑戰(zhàn) !!");
GridBagLayout layout = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
this.setLayout(layout);
this.setBackground(Color.lightGray);
label = new Label("向");
label2 = new Label("發(fā)出挑戰(zhàn)要求");
player = new Choice();
m_bOk = new Button("決定");
m_bCancel = new Button("放棄");
hand = new CheckboxGroup();
black = new Checkbox("執(zhí)黑先行");
white = new Checkbox("執(zhí)白后行");
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() + " 挑戰(zhàn)么 ? " , "挑戰(zhàn) !! " ,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();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -