📄 chatclinet.java
字号:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
//客户端类
public class ChatClinet extends JFrame implements Runnable
{
Border border1;
Border border2;
Border border3;
Border border4;
JPanel panel0 = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JLabel jLabel1 = new JLabel();
JLabel labelStatus = new JLabel();
JTextField jTextField1 = new JTextField();
JTextArea TextArea1 = new JTextArea();
JScrollPane jScrollPane1 = new JScrollPane();
Socket socket;
DataInputStream inData;
DataOutputStream outData;
String host;
String username = "";
public ChatClinet()
{
super( "ChatClient" );
//设置主机地址为127.0.0.1
host = "127.0.0.1";
}
void login()
{
//新建一个LoginFrame的对象loginframe
LoginFrame loginframe = new LoginFrame(this);
loginframe.validate();
//设置loginframe的初始位置
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = loginframe.getSize();
if (frameSize.height > screenSize.height )
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width )
{
frameSize.width = screenSize.width;
}
loginframe.setLocation(
(screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
loginframe.setVisible(true);
loginframe.setFocusable(true);
}
//初始化客户区窗口中的各组件
private void jbInit() throws Exception
{
TextArea1.setEditable(false);
this.setSize(new Dimension(300,220));
this.getContentPane().setLayout(new BorderLayout());
border1 = BorderFactory.createEmptyBorder(2,4,4,4);
border2 = BorderFactory.createEmptyBorder(4,5,2,0);
border3 = BorderFactory.createEmptyBorder(5,0,2,4);
border4 = BorderFactory.createCompoundBorder(new
EtchedBorder(EtchedBorder.RAISED,Color.white, new Color(142,142,142)),
BorderFactory.createEmptyBorder(2,5,2,0));
panel0.setMaximumSize(new Dimension(32767, 60));
panel0.setMinimumSize(new Dimension(70, 60));
panel0.setPreferredSize(new Dimension(70, 60));
panel0.setLayout(new BorderLayout());
panel1.setMaximumSize(new Dimension(32767, 35));
panel1.setMinimumSize(new Dimension(10, 35));
panel1.setPreferredSize(new Dimension(10, 35));
panel1.setLayout(new BorderLayout());
panel2.setLayout(new BorderLayout());
panel2.setBorder(border1);
panel3.setBorder(border2);
panel3.setMaximumSize(new Dimension( 70, 32767));
panel3.setMinimumSize(new Dimension(70, 10));
panel3.setPreferredSize(new Dimension(70, 10));
panel3.setLayout(new GridLayout());
panel4.setLayout(new GridLayout());
panel4.setBorder(border3);
panel5.setBorder(border4);
panel5.setMaximumSize(new Dimension(32767, 25));
panel5.setMinimumSize(new Dimension(10, 25));
panel5.setPreferredSize(new Dimension(10, 25));
panel5.setLayout(new BorderLayout());
jLabel1.setText("Message: ");
labelStatus.setText("Current User: ");
jTextField1.addActionListener(new
java.awt.event.ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jTextField1_actionPerformed(e);
}
}
);
panel3.add(jLabel1, null);
panel1.add(panel3, BorderLayout.WEST);
panel4.add(jTextField1, null);
panel1.add(panel4, BorderLayout.CENTER);
panel2.add(jScrollPane1, BorderLayout.CENTER);
panel5.add(labelStatus, BorderLayout.CENTER);
jScrollPane1.getViewport().add(TextArea1, null);
panel0.add(panel1, BorderLayout.CENTER);
panel0.add(panel5, BorderLayout.SOUTH);
this.getContentPane().add(panel0, BorderLayout.SOUTH);
this.getContentPane().add(panel2, BorderLayout.CENTER);
this.setSize(300,250);
this.setVisible(true);
}
//实现run函数,读取用户输入的信息并显示在窗口的文本区中
public void run()
{
try
{
while(true)
{
TextArea1.append(inData.readUTF() + "\n");
TextArea1.setCaretPosition(TextArea1.getText().length());
}
}
catch(IOException ex)
{
TextArea1.append( "Error writing!\n" );
}
}
//响应jTextField1的输入
void jTextField1_actionPerformed(ActionEvent e)
{
Date today = new Date();
try
{
//将用户名和用户发信息的时间显示到窗口的文本区中
outData.writeUTF(username + " "
+ ((today.getHours()<10)?("0"+today.getHours()):today.getHours()) + ":"
+ ((today.getMinutes()<10)?("0"+today.getMinutes()):today.getMinutes()) + ":"
+ ((today.getSeconds()<10)?("0"+today.getSeconds()):today.getSeconds())
+ "\n " + e.getActionCommand());
jTextField1.setText("");
TextArea1.setCaretPosition(TextArea1.getText().length());
}
catch(IOException ex)
{
TextArea1.append( "Error writing!\n" );
}
}
//运行客户端
public void runClient()
{
try
{
jbInit();
login();
connectToServer();
startThread();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//连接服务器
public void connectToServer() throws Exception
{
try
{
socket = new Socket(InetAddress.getByName(host),5555);
inData = new DataInputStream(socket.getInputStream());
outData = new DataOutputStream(socket.getOutputStream());
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
//启动线程
public void startThread() throws Exception
{
Thread thread = new Thread(this);
thread.start();
}
public static void main(String[] args)
{
ChatClinet clinet = new ChatClinet();
clinet.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
clinet.runClient();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -