📄 chatroomclient.java
字号:
package day23;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatRoomClient implements ActionListener {
private JFrame jf;
private JTextArea jta;
private JLabel label;
private JButton button;
private JTextField field;
private Socket s=null;
private String name;
private PrintWriter pw;
private BufferedReader br;
public ChatRoomClient(){
jf=new JFrame("聊天室客户端V1.0");
do {
String ip = JOptionPane.showInputDialog(jf, "请输入服务器IP:","127.0.0.1");
String port = JOptionPane.showInputDialog(jf, "请输入服务器的端口号","8888");
try {
s = new Socket(ip, Integer.parseInt(port));
pw=new PrintWriter(s.getOutputStream());
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (IOException e) {
JOptionPane.showMessageDialog(jf, "连接参数错误,请重新输入");
}
} while (s==null);
name=JOptionPane.showInputDialog(jf,"请输入名称","姜维");
jta=new JTextArea(30,40);
label=new JLabel(name);
button=new JButton("发送");
field=new JTextField(25);
init();
addEvntHandler();
}
public void init(){
JScrollPane jsp=new JScrollPane(jta);
jf.add(jsp,BorderLayout.CENTER);
JPanel panel=new JPanel();
panel.add(label);
panel.add(field);
panel.add(button);
jf.add(panel,BorderLayout.SOUTH);
Font f=new Font("黑体", Font.BOLD,24);
label.setFont(f);
jta.setEditable(false);
}
public void actionPerformed(ActionEvent e) {
pw.println(name+":"+field.getText());
pw.flush();
field.setText("");
}
private void addEvntHandler(){
button.addActionListener(this);
field.addActionListener(this);
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int op= JOptionPane.showConfirmDialog(jf, "确定离开聊天室吗?","确定退出",JOptionPane.YES_NO_OPTION);
if(op==JOptionPane.YES_OPTION){
pw.println("%EXIT%:"+name);
pw.flush();
try {
Thread.sleep(400);
} catch (InterruptedException e1) {
e1.printStackTrace();
}finally{
try{s.close();}catch(IOException e2){}
}
System.exit(0);
}
}
});
}
public void showMe(){
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
new ReadMessageThread().start();
}
class ReadMessageThread extends Thread{
public void run(){
while(true){
try {
String str=br.readLine();
jta.append(str+"\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
new ChatRoomClient().showMe();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -