📄 clientframe.java
字号:
package chatclient;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import com.borland.dbswing.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class ClientFrame extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
XYLayout xYLayout1 = new XYLayout();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton1 = new JButton();
JRadioButton jRadioButton1 = new JRadioButton();
JRadioButton jRadioButton2 = new JRadioButton();
JTextField jTextField4 = new JTextField();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
ButtonGroup buttonGroup1 = new ButtonGroup();
JScrollPane jScrollPane1 = new JScrollPane();
JScrollPane jScrollPane2 = new JScrollPane();
JList jList1 = new JList();
JTextArea jTextArea1 = new JTextArea();
Socket socket=null;
BufferedReader cin;
PrintStream cout;
String clientName="";
//Construct the frame
public ClientFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(600, 300));
this.setTitle("聊天系统——客户端");
jPanel1.setBackground(SystemColor.inactiveCaptionText);
jPanel1.setFont(new java.awt.Font("Dialog", 0, 12));
jPanel1.setLayout(xYLayout1);
jLabel1.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel1.setText("服务器IP:");
jTextField1.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField1.setSelectionStart(11);
jTextField1.setText("127.0.0.1");
jLabel2.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel2.setText("端口:");
jTextField2.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField2.setSelectionStart(11);
jTextField2.setText("6544");
jLabel3.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel3.setText("用户名:");
jTextField3.setSelectionStart(11);
jTextField3.setText("");
jButton1.setFont(new java.awt.Font("Dialog", 0, 12)); jButton1.setAlignmentY((float) 0.5);
jButton1.setVerifyInputWhenFocusTarget(true);
jButton1.setText("连接服务器");
jButton1.addActionListener(new ClientFrame_jButton1_actionAdapter(this));
jRadioButton1.setBackground(SystemColor.inactiveCaptionText);
jRadioButton1.setFont(new java.awt.Font("Dialog", 0, 12));
jRadioButton1.setSelected(true);
jRadioButton1.setText("广播");
jRadioButton2.setBackground(SystemColor.inactiveCaptionText);
jRadioButton2.setFont(new java.awt.Font("Dialog", 0, 12));
jRadioButton2.setText("特定用户");
jTextField4.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField4.setText("");
jButton2.setBackground(SystemColor.activeCaptionText);
jButton2.setFont(new java.awt.Font("Dialog", 0, 12));
jButton2.setText("发送信息");
jButton2.addActionListener(new ClientFrame_jButton2_actionAdapter(this));
jButton3.setFont(new java.awt.Font("Dialog", 0, 12));
jButton3.setText("断开连接");
jButton3.addActionListener(new ClientFrame_jButton3_actionAdapter(this));
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); contentPane.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jLabel1, new XYConstraints(32, 20, 65, 25));
jPanel1.add(jTextField1, new XYConstraints(95, 16, 101, 30));
jPanel1.add(jLabel2, new XYConstraints(215, 18, 46, 26));
jPanel1.add(jTextField2, new XYConstraints(258, 16, 65, 30));
jPanel1.add(jLabel3, new XYConstraints(342, 15, 48, 29));
jPanel1.add(jTextField3, new XYConstraints(397, 16, 76, 30));
jPanel1.add(jButton1, new XYConstraints(494, 15, 94, 33));
jPanel1.add(jRadioButton1, new XYConstraints(32, 55, 61, 26));
jPanel1.add(jRadioButton2, new XYConstraints(31, 82, 81, 26));
jPanel1.add(jTextField4, new XYConstraints(137, 68, 208, 34));
jPanel1.add(jButton3, new XYConstraints(493, 66, 94, 35));
jPanel1.add(jButton2, new XYConstraints(363, 66, 103, 35));
buttonGroup1.add(jRadioButton1);
buttonGroup1.add(jRadioButton2);
jPanel1.add(jScrollPane1, new XYConstraints(254, 119, 329, 172));
jScrollPane1.getViewport().add(jTextArea1, null);
jPanel1.add(jScrollPane2, new XYConstraints(27, 120, 200, 170));
jScrollPane2.getViewport().add(jList1, null);
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton1_actionPerformed(ActionEvent e) {
try{
InetAddress ip = InetAddress.getByName(jTextField1.getText().trim());
int port=Integer.parseInt(jTextField2.getText().trim());
socket=new Socket(ip,port);
jTextArea1.append("系统提示:与聊天服务器系统开始连接。。。\n");
}catch(Exception ex){
jTextArea1.append("服务器连接出错!");
}
if(socket!=null){
jTextArea1.append("系统提示:系统与服务器连接成功。。。\n");
clientName=jTextField3.getText().trim();
try{
cin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
cout=new PrintStream(socket.getOutputStream());
String str="PEOPLE:"+clientName;
cout.println(str);
ReadMessageThread readThread=new ReadMessageThread();
readThread.start();
}catch(IOException ex){
jTextArea1.append("网络流的输入输出异常");
}
}
}
void jButton2_actionPerformed(ActionEvent e) {
String message=jTextField4.getText().trim();
String str="MSG:";
if(jRadioButton1.isSelected()){
str=str+"BOARD:";
}
else{
String name=jList1.getSelectedValue().toString();
str=str+name+":";
}
str+=":"+message;
cout.println(str);
}
void jButton3_actionPerformed(ActionEvent e) {
String str="QUIT";
cout.println(str);
jTextArea1.append("客户请求断开连接\n");
}
class ReadMessageThread extends Thread{
public void run(){
String line="";
while(true){
try{
line=cin.readLine();
}catch(IOException ex){
System.out.println("输入输出异常\n");
}
StringTokenizer st=new StringTokenizer(line,":");
String keyword=st.nextToken();
if(keyword.equalsIgnoreCase("quit")){ //断开网络连接
try{
socket.close();
jTextArea1.append("接收到服务器同意端口信息,套节字关闭\n");
}catch(Exception ex){
jTextArea1.append("关闭套接字异常");
}
}
else if(keyword.equalsIgnoreCase("PEOPLE")){
Vector imessage=new Vector();
while(st.hasMoreTokens()){
imessage.addElement(st.nextToken());
}
jList1.setListData(imessage);
}
else if(keyword.equalsIgnoreCase("MSG")){
String message=st.nextToken("\0");
message=message.substring(1);
jTextArea1.append(message+"\n");
}
}
}
}
}
class ClientFrame_jButton1_actionAdapter implements java.awt.event.ActionListener {
ClientFrame adaptee;
ClientFrame_jButton1_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class ClientFrame_jButton2_actionAdapter implements java.awt.event.ActionListener {
ClientFrame adaptee;
ClientFrame_jButton2_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class ClientFrame_jButton3_actionAdapter implements java.awt.event.ActionListener {
ClientFrame adaptee;
ClientFrame_jButton3_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton3_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -