📄 chatinterface.java
字号:
package jclass;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatInterface extends JFrame {
private JTextArea sent;
private JTextArea recieved;
private JScrollPane scrollRecieved;
private JLabel label;
private JButton sendMsg;
private JButton cancelSendMsg;
private JScrollPane scrollSent;
private Socket socket;
private String username;
/**
* Create the frame
*/
public ChatInterface(String username,Socket socket) {
super();
this.username=username;
this.socket=socket;
//告知服务器用户登陆
sendMessages(username);
init();
addListeners();
new Thread(new RecieveMessage()).start();
}
//初始化成员变量和设置窗体属性
private void init()
{
//设置窗体属性
getContentPane().setLayout(null);
setBounds(100, 100, 417, 640);
//获取屏幕大小,并设置窗体在屏幕中央显示
Dimension screen=
Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screen.width-getWidth())/2,(screen.height-getHeight())/2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击窗体关闭按钮时的默认操作为关闭
//设置显示收到信息的滚动条
scrollRecieved = new JScrollPane();
scrollRecieved.setBounds(0, 0, 409, 435);
getContentPane().add(scrollRecieved);//添加到窗体上
//设置收到信息时显示的文本域
recieved = new JTextArea();
recieved.setLineWrap(true); //设置分行显示
recieved.setEditable(false); //禁止编辑
recieved.setBackground(Color.WHITE); //设背景颜色为白色
scrollRecieved.setViewportView(recieved);//添加到滚动条上
//设置提示发送信息标签
label = new JLabel();
label.setText(" 输入要发送的内容:");
label.setBounds(0, 441, 127, 100);
getContentPane().add(label);
//设置发送信息文本域所使用的滚动条
scrollSent = new JScrollPane();
scrollSent.setBounds(133, 441, 276, 100);
getContentPane().add(scrollSent);
//设置接收用户输入信息的文本域
sent = new JTextArea();
scrollSent.setViewportView(sent);
//添加发送按钮
sendMsg = new JButton();
sendMsg.setText("发送");
sendMsg.setBounds(133, 559, 106, 28);
getContentPane().add(sendMsg);
//添加取消按钮
cancelSendMsg = new JButton();
cancelSendMsg.setText("取消");
cancelSendMsg.setBounds(293, 559, 106, 28);
getContentPane().add(cancelSendMsg);
}
//为成员添加事件监听器
private void addListeners()
{
//添加事件监听器到取消按钮
cancelSendMsg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sent.setText("");
}
});
//添加事件监听器到发送按钮
sendMsg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//如果发送信息框非空,发送信息到服务器
if(!sent.getText().equals(""))
sendMessages(username+"说:"+sent.getText());
}
});
}
//把用户的信息发到服务器上
private void sendMessages(String msg)
{
//尝试从socket中取得输出流,并且把信息写到这个流
try {
OutputStream os = socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.println(msg);
pw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//用于接收服务器发来信息的线程
private class RecieveMessage implements Runnable
{
public void run()
{
InputStream is=null;
BufferedReader br=null;
String messageRecieved="";
//尝试从socket里取得输入流
try {
is=socket.getInputStream();
br=new BufferedReader(
new InputStreamReader(is));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//一直在等待接收信息,当收到服务器信息时,写的
//接收信息文本框
while(true)
{
try {
messageRecieved=br.readLine();
recieved.append("\n"+messageRecieved);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
break;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -