亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chatclient.java

?? 一個用java寫的類QQ聊天共具
?? JAVA
字號:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.net.*;

/*
 * 聊天客戶端的主框架類
 */
public class ChatClient extends JFrame implements ActionListener{

	String ip = "127.0.0.1";//連接到服務端的ip地址
	int port = 8888;//連接到服務端的端口號
	String userName = "匆匆過客";//用戶名
	int type = 0;//0表示未連接,1表示已連接

	Image icon;//程序圖標
	JComboBox combobox;//選擇發送消息的接受者
	JTextArea messageShow;//客戶端的信息顯示
	JScrollPane messageScrollPane;//信息顯示的滾動條

	JLabel express,sendToLabel,messageLabel ;

	JTextField clientMessage;//客戶端消息的發送
	JCheckBox checkbox;//悄悄話
	JComboBox actionlist;//表情選擇
	JButton clientMessageButton;//發送消息
	JTextField showStatus;//顯示用戶連接狀態
	
	Socket socket;
	ObjectOutputStream output;//網絡套接字輸出流
	ObjectInputStream input;//網絡套接字輸入流
	
	ClientReceive recvThread;

	//建立菜單欄
	JMenuBar jMenuBar = new JMenuBar(); 
	//建立菜單組
	JMenu operateMenu = new JMenu ("操作(O)"); 
	//建立菜單項
	JMenuItem loginItem = new JMenuItem ("用戶登錄(I)");
	JMenuItem logoffItem = new JMenuItem ("用戶注銷(L)");
	JMenuItem exitItem=new JMenuItem ("退出(X)");

	JMenu conMenu=new JMenu ("設置(C)");
	JMenuItem userItem=new JMenuItem ("用戶設置(U)");
	JMenuItem connectItem=new JMenuItem ("連接設置(C)");
	
	
	JMenu helpMenu=new JMenu ("幫助(H)");
	JMenuItem helpItem=new JMenuItem ("幫助(H)");

	//建立工具欄
	JToolBar toolBar = new JToolBar();
	//建立工具欄中的按鈕組件
	JButton loginButton;//用戶登錄
	JButton logoffButton;//用戶注銷
	JButton userButton;//用戶信息的設置
	JButton connectButton;//連接設置
	JButton exitButton;//退出按鈕

	//框架的大小
	Dimension faceSize = new Dimension(400, 600);

	JPanel downPanel ;
	GridBagLayout girdBag;
	GridBagConstraints girdBagCon;
	
	public ChatClient(){
		init();//初始化程序

		//添加框架的關閉事件處理
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.pack();
		//設置框架的大小
		this.setSize(faceSize);

		//設置運行時窗口的位置
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,
						 (int) (screenSize.height - faceSize.getHeight()) / 2);
		this.setResizable(false);
		this.setTitle("聊天室客戶端"); //設置標題

		//程序圖標
		icon = getImage("icon.gif");
		this.setIconImage(icon); //設置程序圖標
		show();

		//為操作菜單欄設置熱鍵'V'
		operateMenu.setMnemonic('O');

		//為用戶登錄設置快捷鍵為ctrl+i
		loginItem.setMnemonic ('I'); 
		loginItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I,InputEvent.CTRL_MASK));

		//為用戶注銷快捷鍵為ctrl+l
		logoffItem.setMnemonic ('L'); 
		logoffItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_L,InputEvent.CTRL_MASK));

		//為退出快捷鍵為ctrl+x
		exitItem.setMnemonic ('X'); 
		exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK));

		//為設置菜單欄設置熱鍵'C'
		conMenu.setMnemonic('C');

		//為用戶設置設置快捷鍵為ctrl+u
		userItem.setMnemonic ('U'); 
		userItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK));

		//為連接設置設置快捷鍵為ctrl+c
		connectItem.setMnemonic ('C'); 
		connectItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK));

		//為幫助菜單欄設置熱鍵'H'
		helpMenu.setMnemonic('H');

		//為幫助設置快捷鍵為ctrl+p
		helpItem.setMnemonic ('H'); 
		helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK));
	}

	/**
	 * 程序初始化函數
	 */
	public void init(){

		Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());

		//添加菜單欄
		operateMenu.add (loginItem);
		operateMenu.add (logoffItem);
		operateMenu.add (exitItem);
		jMenuBar.add (operateMenu); 
		conMenu.add (userItem);
		conMenu.add (connectItem);
		jMenuBar.add (conMenu);
		helpMenu.add (helpItem);
		jMenuBar.add (helpMenu); 
		setJMenuBar (jMenuBar);

		//初始化按鈕
		loginButton = new JButton("登錄");
		logoffButton = new JButton("注銷");
		userButton  = new JButton("用戶設置" );
		connectButton  = new JButton("連接設置" );
		exitButton = new JButton("退出" );
		//當鼠標放上顯示信息
		loginButton.setToolTipText("連接到指定的服務器");
		logoffButton.setToolTipText("與服務器斷開連接");
		userButton.setToolTipText("設置用戶信息");
		connectButton.setToolTipText("設置所要連接到的服務器信息");
		//將按鈕添加到工具欄
		toolBar.add(userButton);
		toolBar.add(connectButton);
		toolBar.addSeparator();//添加分隔欄
		toolBar.add(loginButton);
		toolBar.add(logoffButton);
		toolBar.addSeparator();//添加分隔欄
		toolBar.add(exitButton);
		contentPane.add(toolBar,BorderLayout.NORTH);

		checkbox = new JCheckBox("悄悄話");
		checkbox.setSelected(false);

		actionlist = new JComboBox();
		actionlist.addItem("微笑地");
		actionlist.addItem("高興地");
		actionlist.addItem("輕輕地");
		actionlist.addItem("生氣地");
		actionlist.addItem("小心地");
		actionlist.addItem("靜靜地");
		actionlist.setSelectedIndex(0);

		//初始時
		loginButton.setEnabled(true);
		logoffButton.setEnabled(false);

		//為菜單欄添加事件監聽
		loginItem.addActionListener(this);
		logoffItem.addActionListener(this);
		exitItem.addActionListener(this);
		userItem.addActionListener(this);
		connectItem.addActionListener(this);
		helpItem.addActionListener(this);
		
		//添加按鈕的事件偵聽
		loginButton.addActionListener(this);
		logoffButton.addActionListener(this);
		userButton.addActionListener(this);
		connectButton.addActionListener(this);
		exitButton.addActionListener(this);
		
		combobox = new JComboBox();
		combobox.insertItemAt("所有人",0);
		combobox.setSelectedIndex(0);
		
		messageShow = new JTextArea();
		messageShow.setEditable(false);
		//添加滾動條
		messageScrollPane = new JScrollPane(messageShow,
			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		messageScrollPane.setPreferredSize(new Dimension(400,400));
		messageScrollPane.revalidate();
		
		clientMessage = new JTextField(23);
		clientMessage.setEnabled(false);
		clientMessageButton = new JButton();
		clientMessageButton.setText("發送");

		//添加系統消息的事件偵聽
		clientMessage.addActionListener(this);
		clientMessageButton.addActionListener(this);

		sendToLabel = new JLabel("發送至:");
		express = new JLabel("         表情:   ");
		messageLabel = new JLabel("發送消息:");
		downPanel = new JPanel();
		girdBag = new GridBagLayout();
		downPanel.setLayout(girdBag);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 0;
		girdBagCon.gridy = 0;
		girdBagCon.gridwidth = 5;
		girdBagCon.gridheight = 2;
		girdBagCon.ipadx = 5;
		girdBagCon.ipady = 5;
		JLabel none = new JLabel("    ");
		girdBag.setConstraints(none,girdBagCon);
		downPanel.add(none);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 0;
		girdBagCon.gridy = 2;
		girdBagCon.insets = new Insets(1,0,0,0);
		//girdBagCon.ipadx = 5;
		//girdBagCon.ipady = 5;
		girdBag.setConstraints(sendToLabel,girdBagCon);
		downPanel.add(sendToLabel);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx =1;
		girdBagCon.gridy = 2;
		girdBagCon.anchor = GridBagConstraints.LINE_START;
		girdBag.setConstraints(combobox,girdBagCon);
		downPanel.add(combobox);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx =2;
		girdBagCon.gridy = 2;
		girdBagCon.anchor = GridBagConstraints.LINE_END;
		girdBag.setConstraints(express,girdBagCon);
		downPanel.add(express);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 3;
		girdBagCon.gridy = 2;
		girdBagCon.anchor = GridBagConstraints.LINE_START;
		//girdBagCon.insets = new Insets(1,0,0,0);
		//girdBagCon.ipadx = 5;
		//girdBagCon.ipady = 5;
		girdBag.setConstraints(actionlist,girdBagCon);
		downPanel.add(actionlist);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 4;
		girdBagCon.gridy = 2;
		girdBagCon.insets = new Insets(1,0,0,0);
		//girdBagCon.ipadx = 5;
		//girdBagCon.ipady = 5;
		girdBag.setConstraints(checkbox,girdBagCon);
		downPanel.add(checkbox);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 0;
		girdBagCon.gridy = 3;
		girdBag.setConstraints(messageLabel,girdBagCon);
		downPanel.add(messageLabel);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 1;
		girdBagCon.gridy = 3;
		girdBagCon.gridwidth = 3;
		girdBagCon.gridheight = 1;
		girdBag.setConstraints(clientMessage,girdBagCon);
		downPanel.add(clientMessage);

		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 4;
		girdBagCon.gridy = 3;
		girdBag.setConstraints(clientMessageButton,girdBagCon);
		downPanel.add(clientMessageButton);

		showStatus = new JTextField(35);
		showStatus.setEditable(false);
		girdBagCon = new GridBagConstraints();
		girdBagCon.gridx = 0;
		girdBagCon.gridy = 5;
		girdBagCon.gridwidth = 5;
		girdBag.setConstraints(showStatus,girdBagCon);
		downPanel.add(showStatus);

		contentPane.add(messageScrollPane,BorderLayout.CENTER);
		contentPane.add(downPanel,BorderLayout.SOUTH);
		
		//關閉程序時的操作
		this.addWindowListener(
			new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					if(type == 1){
						DisConnect();
					}
					System.exit(0);
				}
			}
		);
	}

	/**
	 * 事件處理
	 */
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		
		if (obj == userItem || obj == userButton) { //用戶信息設置
			//調出用戶信息設置對話框
			UserConf userConf = new UserConf(this,userName);
			userConf.show();
			userName = userConf.userInputName;
		}
		else if (obj == connectItem || obj == connectButton) { //連接服務端設置
			//調出連接設置對話框
			ConnectConf conConf = new ConnectConf(this,ip,port);
			conConf.show();
			ip = conConf.userInputIp;
			port = conConf.userInputPort;
		}
		else if (obj == loginItem || obj == loginButton) { //登錄
			Connect();
		}
		else if (obj == logoffItem || obj == logoffButton) { //注銷
			DisConnect();
			showStatus.setText("");
		}
		else if (obj == clientMessage || obj == clientMessageButton) { //發送消息
			SendMessage();
			clientMessage.setText("");
		}
		else if (obj == exitButton || obj == exitItem) { //退出
			int j=JOptionPane.showConfirmDialog(
				this,"真的要退出嗎?","退出",
				JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
			
			if (j == JOptionPane.YES_OPTION){
				if(type == 1){
					DisConnect();
				}
				System.exit(0);
			}
		}
		else if (obj == helpItem) { //菜單欄中的幫助
			//調出幫助對話框
			Help helpDialog = new Help(this);
			helpDialog.show();
		}
	}

	
	public void Connect(){
		try{
			socket = new Socket(ip,port);
		}
		catch (Exception e){
			JOptionPane.showConfirmDialog(
				this,"不能連接到指定的服務器。\n請確認連接設置是否正確。","提示",
				JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
			return;
		}

		try{
			output = new ObjectOutputStream(socket.getOutputStream());
			output.flush();
			input  = new ObjectInputStream(socket.getInputStream() );
			
			output.writeObject(userName);
			output.flush();
			
			recvThread = new ClientReceive(socket,output,input,combobox,messageShow,showStatus);
			recvThread.start();
			
			loginButton.setEnabled(false);
			loginItem.setEnabled(false);
			userButton.setEnabled(false);
			userItem.setEnabled(false);
			connectButton.setEnabled(false);
			connectItem.setEnabled(false);
			logoffButton.setEnabled(true);
			logoffItem.setEnabled(true);
			clientMessage.setEnabled(true);
			messageShow.append("連接服務器 "+ip+":"+port+" 成功...\n");
			type = 1;//標志位設為已連接
		}
		catch (Exception e){
			System.out.println(e);
			return;
		}
	}
	
	public void DisConnect(){
		loginButton.setEnabled(true);
		loginItem.setEnabled(true);
		userButton.setEnabled(true);
		userItem.setEnabled(true);
		connectButton.setEnabled(true);
		connectItem.setEnabled(true);
		logoffButton.setEnabled(false);
		logoffItem.setEnabled(false);
		clientMessage.setEnabled(false);
		
		if(socket.isClosed()){
			return ;
		}
		
		try{
			output.writeObject("用戶下線");
			output.flush();
		
			input.close();
			output.close();
			socket.close();
			messageShow.append("已經與服務器斷開連接...\n");
			type = 0;//標志位設為未連接
		}
		catch (Exception e){
			//
		}
	}
	
	public void SendMessage(){
		String toSomebody = combobox.getSelectedItem().toString();
		String status  = "";
		if(checkbox.isSelected()){
			status = "悄悄話";
		}
		
		String action = actionlist.getSelectedItem().toString();
		String message = clientMessage.getText();
		
		if(socket.isClosed()){
			return ;
		}
		
		try{
			output.writeObject("聊天信息");
			output.flush();
			output.writeObject(toSomebody);
			output.flush();
			output.writeObject(status);
			output.flush();
			output.writeObject(action);
			output.flush();
			output.writeObject(message);
			output.flush();
		}
		catch (Exception e){
			//
		}
	}

	/**
	 * 通過給定的文件名獲得圖像
	 */
	Image getImage(String filename) {
		URLClassLoader urlLoader = (URLClassLoader)this.getClass().
			getClassLoader();
		URL url = null;
		Image image = null;
		url = urlLoader.findResource(filename);
		image = Toolkit.getDefaultToolkit().getImage(url);
		MediaTracker mediatracker = new MediaTracker(this);
		try {
			mediatracker.addImage(image, 0);
			mediatracker.waitForID(0);
		}
		catch (InterruptedException _ex) {
			image = null;
		}
		if (mediatracker.isErrorID(0)) {
			image = null;
		}

		return image;
	}

	public static void main(String[] args) {
		ChatClient app = new ChatClient();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线电影| 国产成人精品综合在线观看| 国产99久久久国产精品潘金| 欧美大白屁股肥臀xxxxxx| 秋霞影院一区二区| 欧美mv日韩mv国产网站app| 蜜桃视频一区二区三区在线观看| 精品视频在线免费看| 丝袜美腿成人在线| 3d动漫精品啪啪一区二区竹菊| 亚洲国产乱码最新视频| 欧美在线免费观看视频| 亚洲一区二区三区四区五区黄| 欧美日韩免费观看一区二区三区| 一区二区三区91| 欧美美女喷水视频| 午夜精品一区在线观看| 自拍av一区二区三区| 91欧美一区二区| 美洲天堂一区二卡三卡四卡视频 | 毛片av一区二区三区| 精品国产不卡一区二区三区| 成人黄色一级视频| 亚洲午夜久久久久久久久电影院| 欧美成人三级电影在线| 色天天综合色天天久久| 久久精品免费观看| 亚洲一区二区在线免费看| 久久免费精品国产久精品久久久久| 91免费国产在线| 久久爱另类一区二区小说| 亚洲乱码国产乱码精品精可以看| 88在线观看91蜜桃国自产| 国产成人综合在线播放| 卡一卡二国产精品 | 欧美一区二区三区精品| 麻豆精品视频在线观看| 18成人在线视频| 2欧美一区二区三区在线观看视频| 色综合激情久久| 国产一区二区中文字幕| 亚洲成人你懂的| 亚洲欧美日韩电影| 国产精品不卡在线| 欧美激情一区不卡| 欧美成人综合网站| 日韩欧美美女一区二区三区| 欧美日韩一区二区三区不卡| 色狠狠色噜噜噜综合网| 欧美曰成人黄网| 欧美三级电影网| 欧美区一区二区三区| 91精品久久久久久久久99蜜臂| 欧美亚洲高清一区| 欧美性猛片aaaaaaa做受| 欧美色老头old∨ideo| 91在线观看污| 56国语精品自产拍在线观看| 欧美日韩日日夜夜| 精品欧美黑人一区二区三区| 国产视频一区在线观看| 亚洲精品国产品国语在线app| 中文字幕一区二区视频| 亚洲综合激情另类小说区| 日日摸夜夜添夜夜添亚洲女人| 日韩专区欧美专区| 国产在线国偷精品产拍免费yy| 成人免费av在线| 欧美一区二区久久久| 国产精品区一区二区三| 亚洲一区在线观看视频| 国产精品69久久久久水密桃| 狠狠色丁香九九婷婷综合五月| 国产suv精品一区二区6| 欧美色图激情小说| 久久综合色之久久综合| 亚洲宅男天堂在线观看无病毒| 精品一区二区久久久| 欧美性做爰猛烈叫床潮| 中文无字幕一区二区三区| 视频一区二区欧美| 91同城在线观看| 久久久久久久国产精品影院| 午夜精品一区二区三区电影天堂 | 欧美日韩国产经典色站一区二区三区 | 日韩一区二区在线免费观看| 亚洲欧洲日产国码二区| 国产精品亚洲综合一区在线观看| 欧美日免费三级在线| 亚洲色图欧洲色图| 97se亚洲国产综合自在线观| 欧美高清在线一区二区| 久久99精品久久久久久| 欧美精品丝袜久久久中文字幕| 亚洲精品免费电影| 欧美日韩一本到| 亚洲高清免费观看| 欧美男生操女生| 黑人巨大精品欧美一区| 精品久久免费看| 国内精品久久久久影院薰衣草| 欧美一二三区精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美一二三区在线| 全国精品久久少妇| 国产亚洲欧美日韩日本| 成人免费看黄yyy456| 国产精品国产自产拍高清av | 欧美一区二区三区系列电影| 蜜臀久久99精品久久久久宅男| 精品国产乱码久久久久久久久| 另类人妖一区二区av| 中文字幕乱码一区二区免费| 成人av电影在线网| 日韩国产欧美一区二区三区| 欧美xxxxxxxx| 色国产综合视频| 韩国av一区二区三区在线观看| 综合久久国产九一剧情麻豆| 欧美一三区三区四区免费在线看| 日本少妇一区二区| 国产精品久久99| 91精品国产综合久久小美女| av不卡一区二区三区| 看片的网站亚洲| 亚洲成人免费av| 国产精品成人一区二区三区夜夜夜| 6080日韩午夜伦伦午夜伦| 91原创在线视频| 成人福利视频网站| 日一区二区三区| 最新热久久免费视频| 久久精品免费在线观看| 欧美视频中文一区二区三区在线观看| 国产一区二区三区香蕉| 五月天激情综合| 亚洲制服丝袜一区| 一区二区日韩电影| √…a在线天堂一区| 久久天天做天天爱综合色| 欧美一区欧美二区| 欧美日韩国产一级片| 欧美影院午夜播放| 色综合色综合色综合色综合色综合| 国产一区二区三区在线观看免费视频| 天天av天天翘天天综合网色鬼国产| 欧美韩日一区二区三区| 久久蜜臀中文字幕| 国产欧美日本一区视频| 国产视频一区在线播放| 国产精品视频第一区| 综合激情成人伊人| 亚洲一区二区欧美| 天天av天天翘天天综合网色鬼国产 | 成人精品视频.| 91免费精品国自产拍在线不卡| 色悠悠亚洲一区二区| 欧美午夜精品电影| 日韩精品一区二区三区在线| 国产欧美日本一区二区三区| 亚洲人快播电影网| 水蜜桃久久夜色精品一区的特点| 青青草原综合久久大伊人精品优势| 精久久久久久久久久久| 波多野洁衣一区| 欧美高清在线视频| 五月婷婷综合激情| 国产v日产∨综合v精品视频| 色系网站成人免费| 精品国产sm最大网站免费看| 一区二区在线免费| 国产成都精品91一区二区三| 欧美日韩亚州综合| 国产欧美精品在线观看| 视频在线观看91| 色综合久久精品| 国产婷婷一区二区| 视频一区二区三区入口| 91在线免费视频观看| 久久久www免费人成精品| 日韩成人一级大片| 欧美少妇性性性| 一区二区三区日韩欧美精品| 国产精品自拍毛片| 精品日韩av一区二区| 五月天亚洲精品| 欧美色精品在线视频| 最近日韩中文字幕| 成人国产免费视频| 国产丝袜欧美中文另类| 国产乱码一区二区三区| 精品对白一区国产伦| 日韩成人免费看| 欧美刺激脚交jootjob| 久久精品噜噜噜成人88aⅴ| 日韩欧美中文字幕制服| 久久99精品国产.久久久久久| 亚洲精品在线电影| 国产乱子伦视频一区二区三区 | 香蕉成人啪国产精品视频综合网|