⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatfrm.java

📁 自己编制的othello程序
💻 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 + -