📄 chatclient.java
字号:
package Com.handou.Client;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.*;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.io.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class ChatClient extends Frame{
Socket client=null;
DataOutputStream dos=null;
DataInputStream dis=null;
boolean isConnection = false;//是否已连接服务器标志
TextField send = new TextField(50);//发送消息文本框
TextArea rec = new TextArea(25,40);//接受消息文本框
TextField login =new TextField(48);//登录姓名文本框
TextArea online = new TextArea(25,20);//在线用户显示文本框
// String temp = null;//存放临时字符串
/**
* @param args
*/
Thread rev = new Thread(new ReadMessage());
public static void main(String[] args) {
new ChatClient().launchFrame();
}
public void launchFrame(){
//设置窗体属性
this.setTitle("寒豆简易聊天室客户端");
//this.setLocation(200,300);
this.setVisible(true);
//在窗体上添加面板
JPanel head = new JPanel();
JPanel body = new JPanel();
JPanel feet = new JPanel();
head.setVisible(true);
body.setVisible(true);
feet.setVisible(true);
this.add(head,BorderLayout.NORTH);
this.add(body,BorderLayout.CENTER);
this.add(feet,BorderLayout.SOUTH);
//添加菜单栏
JMenuBar opBar = new JMenuBar();
JMenu op = new JMenu();
// JMenu edit = new JMenu();
Label loginname = new Label("登录名:"); //登录名标签
op.setText("操作");
JMenuItem loginItem = new JMenuItem();
loginItem.setText(" 登录");
loginItem.addActionListener(new LoginListener());
JMenuItem exitItem = new JMenuItem();
exitItem.setText(" 退出");
exitItem.addActionListener(new ExitListener());
op.add(loginItem);
op.add(exitItem);
// edit.setText("编辑");
// JMenuItem copyItem = new JMenuItem();
// copyItem.setText(" 复制");
// copyItem.addActionListener(new CopyListener());
// JMenuItem pasteItem = new JMenuItem();
// pasteItem.setText(" 粘贴");
// pasteItem.addActionListener(new PasteListener());
//
opBar.add(op);
// opBar.add(edit);
login.addActionListener(new LoginListener());
head.add(opBar,BorderLayout.WEST);
head.add(loginname,BorderLayout.CENTER);
head.add(login,BorderLayout.EAST);
//添加发送消息框和接受消息框
rec.setEditable(false);
rec.setFocusable(false);
send.addActionListener(new ClientListener());
body.add(rec,BorderLayout.WEST);
body.add(online,BorderLayout.EAST);
Label messageLabel = new Label("输入发送消息:");
feet.add(messageLabel,BorderLayout.WEST);
feet.add(send,BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent args0){
desConnection();
System.exit(0);
}
}
);
pack();
//connection();
//rev.start();
}
private class LoginListener implements ActionListener{//登录监听
@Override
public void actionPerformed(ActionEvent e) {//登录响应事件
String loginname=login.getText().trim();
if(!(loginname.equals(""))){
login.setEditable(false);
connection();
rev.start();}
}
}
private class ExitListener implements ActionListener{//退出监听
@Override
public void actionPerformed(ActionEvent arg0) {//退出响应事件
if(isConnection){
isConnection = false;
desConnection();
System.exit(0);
}else{
System.exit(0);
}
}
}
private void connection(){//连接服务器
try{
client=new Socket("127.0.0.1",8888);
dos=new DataOutputStream(client.getOutputStream());
dis=new DataInputStream(client.getInputStream());
System.out.println("connected");
isConnection = true;
sendMessage(login.getText());
}catch(UnknownHostException e){
e.printStackTrace();
}catch(IOException e1){
e1.printStackTrace();
}
}
// private class CopyListener implements ActionListener{
//
// @Override
// public void actionPerformed(ActionEvent arg0) {
//
//
// }
//
// }
//
// private class PasteListener implements ActionListener{
//
// @Override
// public void actionPerformed(ActionEvent arg0) {
//
//
// }
//
// }
//
private class ReadMessage implements Runnable{//启用线程,读入服务器端发送过来的消息
public void run() {
try{
while(isConnection){
String st= dis.readUTF();
rec.setText(rec.getText()+ st+"\n");
}
}catch(SocketException e){
System.out.println("BYE-BYE");
}catch(IOException e){
e.printStackTrace();
}
finally{
if(dis != null)
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private class ClientListener implements ActionListener{//发送消息监听
@Override
public void actionPerformed(ActionEvent arg0) {//发送消息响应事件
String str = send.getText().trim();
send.setText("");
if(client != null){
String str1 = login.getText()+"说:";
str = str1 + str;
sendMessage(str);
}else{
rec.setText("请先登录!");
}
//String rectext = rec.getText()+"\n";s
}
}
private void sendMessage(String str){//发送消息方法
try{
dos.writeUTF(str);
dos.flush();
}catch(IOException e1){
e1.printStackTrace();
}
}
public void desConnection(){//断开连接方法
try{
if(dos != null)dos.close();
if(client != null)client.close();
if(dis != null)dis.close();
}catch(Exception e2){
e2.printStackTrace();
}
finally {
try {
if(dos != null)dos.close();
if(dis != null)dis.close();
if(client != null)client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -