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

📄 chatfrm.java

📁 黑白棋123 黑白棋456 大学毕业设计 做很好
💻 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 + -