📄 clientchat.java
字号:
/**
* 客户端程序代码
* 2006-07-31
*/
package com.neworiental.mj.mingregister;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
public class ClientChat implements Runnable{
private static final boolean iFlag = true;
private final JFrame clientFrame;
//private final JTree clientTree;
private final JLabel clientLabel;
private JList clientList;
private final JTextArea clientTextArea;
private final JPanel clientPanel;
private final JButton clientSend;
private final JTextField clientField;
private Socket s;
private String userName;
private ArrayList usersList ;
private InputStream is;
private OutputStream os;
/**
* 构造函数:创建客户端窗体。
* @param clientFrame
*/
public ClientChat(String userName){
//connect to Server
this.userName = userName;
usersList = new ArrayList();
try{
s = new Socket("127.0.0.1",8888);
is = s.getInputStream();
//将username传给服务器
os = s.getOutputStream() ;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
PrintWriter pw = new PrintWriter(bw,true);
pw.println(userName);
}catch(Exception e){
e.printStackTrace() ;
}
//初始化聊天目录
/*
DefaultMutableTreeNode temp = new DefaultMutableTreeNode("temp");
DefaultMutableTreeNode cityFirst = new DefaultMutableTreeNode("北京");
temp.add(cityFirst);
DefaultMutableTreeNode citySecond = new DefaultMutableTreeNode("上海");
temp.add(citySecond);
DefaultMutableTreeNode cityFirstRoom1 = new DefaultMutableTreeNode("ChatRoom1");
cityFirst.add(cityFirstRoom1);
DefaultMutableTreeNode cityFirstRoom2 = new DefaultMutableTreeNode("ChatRoom2");
cityFirst.add(cityFirstRoom2);
DefaultMutableTreeNode citySecondRoom1 = new DefaultMutableTreeNode("ChatRoom1");
citySecond.add(citySecondRoom1);
DefaultMutableTreeNode citySecondRoom2 = new DefaultMutableTreeNode("ChatRoom2");
citySecond.add(citySecondRoom2);
*/
clientFrame = new JFrame("Welcome!");
/**
clientTree = new JTree(temp);
clientTree.setRootVisible(false);
*/
clientList = new JList();
clientTextArea = new JTextArea();
clientPanel = new JPanel();
//ImageIcon ii = new ImageIcon("hanabi.gif");
clientLabel = new JLabel("欢迎光临!");
clientField = new JTextField("send........");
clientSend = new JButton("send");
Thread tt = new Thread(this);
tt.start() ;
}
/**
* 客户窗体初始化显示
*
*/
public void initComponent(){
clientFrame.validate();
//中间垂直分割条
JSplitPane jspMiddle = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT );
jspMiddle.setOneTouchExpandable(true);
//左边水平分割条
JSplitPane jspLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT );
jspLeft.setOneTouchExpandable(true);
jspMiddle.setLeftComponent(jspLeft);
//jspLeft.setTopComponent( new JScrollPane(clientTree));
jspLeft.setTopComponent( new JScrollPane(clientLabel));
jspLeft.setBottomComponent( new JScrollPane(clientList));
//右边水平分割条
JSplitPane jspRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT );
jspRight.setOneTouchExpandable(true);
jspMiddle.setRightComponent(jspRight);
jspRight.setTopComponent( new JScrollPane(clientTextArea));
jspRight.setBottomComponent( new JScrollPane(clientPanel));
//对右下边的面板进行设置
clientPanel.setLayout(new GridLayout(2,2));
clientPanel.add(clientField);
clientPanel.add(clientSend);
//对send按钮添加监听方式
clientSend.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
PrintWriter pw = new PrintWriter(bw,true);
pw.println(ClientChat.this.userName + "said: " + clientField.getText());
}catch(Exception e1){
e1.printStackTrace() ;
}
}
});
//将中间分割条面板作为窗体面板加入窗体中
clientFrame.setContentPane(jspMiddle);
clientFrame.pack();
//设置窗体最大化
clientFrame.setBounds((GraphicsEnvironment.getLocalGraphicsEnvironment()
.getMaximumWindowBounds()));
//设置各个分割条在窗体上的位置
jspMiddle.setDividerLocation((int)(clientFrame.getSize().width *0.2));
jspLeft.setDividerLocation((int)( clientFrame.getSize().height *0.4));
jspRight.setDividerLocation( (int)(clientFrame.getSize().height * 0.7));
clientFrame.setVisible( true);
clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
}
/**
* 在客户端的左下端JList中显示当前聊天室在线的用户列表。
* @param args
*/
public void run() {
// TODO Auto-generated method stub
String str1= new String("");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((str1=br.readLine())!=null){
if(str1.indexOf("said:")<=0){
String[] temp = str1.split("@");
clientList.setListData(temp);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
clientList.repaint();
}
});
}else{
clientTextArea.setText (clientTextArea.getText()+"\n"+str1);
}
}
}catch(Exception e){
e.printStackTrace() ;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -