文章目录
一、给文本框绑定事件
由于回车的功能是针对文本框的,所有需要给文本框绑定一个事件。
//给文本框绑定一个事件
jtf.addKeyListener(this);
另外该KeyListener是一个接口,需要集成该接口。
public class ServerChatMain extends JFrame implements ActionListener, KeyListener
集成后需要重写三个方法:
@Override
public void keyPressed(KeyEvent e) {//按下
}
@Override
public void keyTyped(KeyEvent e) {//敲击
}
@Override
public void keyReleased(KeyEvent e) {//松开
}
二、重写keyPressed方法
这里需要将获取的e与回车比较,回车:`KeyEvent.VK_ENTER
此处的代码:
if(e.getKeyCode()==KeyEvent.VK_ENTER){
//代码过于冗余
//1.获取文本框中发送的内容
String text = jtf.getText();
//2.拼接需要发送的数据内容
text = "服务端对客户端说:"+text;
// 3.自己也需要显示
jta.append(text+System.lineSeparator());
try{
//4.发送
bw.write(text);
bw.newLine();
bw.flush();
//5.清空文本框内容
jtf.setText("");
}catch (IOException e1){
e1.printStackTrace();
}
//直接调用方法即可
sendDataTosocket();
}
但是考虑到这段代码多处使用,如果这么写有点冗余,所以这里单独写一个发送数据的方法sendDatasockrt
//定义一个方法,实现将数据发送到socket通道中
private void sendDataTosocket(){
//1.获取文本框中发送的内容
String text = jtf.getText();
//2.拼接需要发送的数据内容
text = "服务端对客户端说:"+text;
// 3.自己也需要显示
jta.append(text+System.lineSeparator());
try{
//4.发送
bw.write(text);
bw.newLine();
bw.flush();
//5.清空文本框内容
jtf.setText("");
}catch (IOException e1){
e1.printStackTrace();
}
}
三、所有代码
1.服务端代码
package Chat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;