📄 newchatclient.java
字号:
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.event.ListSelectionEvent;
public class NewChatClient implements Runnable
{
Socket m_socket=null;
PrintWriter out=null;
BufferedReader in=null;
String qname=null;
String qpsw=null;
Vector m_items=new Vector();
static MainClient mc=null;
static ChatRoom cr=null;
static Register rs=null;
NewChatClient()
{}
boolean connect(String sIP)
{
if(sIP.equals("")) sIP="localhost";
boolean bool=false;
try
{
m_socket=new Socket(sIP,9000);
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(m_socket.getOutputStream())),true);
in=new BufferedReader(new InputStreamReader(m_socket.getInputStream()));
//message="连接成功";
bool=true;
new Thread(this).start();
}
catch(Exception e)
{
//message="连接失败";
bool=false;
}
return bool;
}
public void run()
{
String s=null;
try
{
while(true)
{
s=in.readLine();
//System.out.println("s client="+s);
if(s.equals(""))continue;
int i=0;
while(i<s.length()&&s.charAt(i)!='$')i++;
String stemp=s.substring(0,i);
if(stemp.equals("@loginsuccess"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
qname=s.substring(j,i);
j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
qpsw=s.substring(j,i);
//System.out.println("loginsuccess"+name+psw);
mc.dispose();
cr=new ChatRoom();
}
else if(stemp.equals("@registersuccess"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String sname=s.substring(j,i);
j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String spsw=s.substring(j,i);
mc.jTextField1.setText(sname); //...
mc.jPasswordField.setText(spsw);
mc.jPasswordField.requestFocus();
mc.setVisible(true);
rs.dispose();
}
else if(stemp.equals("@say"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String scontent=s.substring(j,i);
//System.out.print("say="+scontent);
cr.jTextArea.append("\n"+scontent);
//cr.jTextArea.setSelectionStart(cr.jTextArea.getText().length());
//cr.movewheel(scontent);
continue;
}
else if(stemp.equals("@saytext"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String scontent=s.substring(j,i);
//System.out.print("say="+scontent.replace('#','\n'));
cr.jTextArea.append("\n"+scontent.replace((char)257,'\n'));
}
else if(stemp.equals("@addjlist"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String jlist=s.substring(j,i);
m_items.addElement(jlist);
cr.jList.updateUI();
}
else if(stemp.equals("@alterjlist"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String oldjlist=s.substring(j,i);
j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String newjlist=s.substring(j,i);
int index=m_items.indexOf(oldjlist);
m_items.setElementAt(newjlist,index);
cr.jList.updateUI();
}
else if(stemp.equals("@removejlist"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String jlist=s.substring(j,i);
m_items.removeElement(jlist);
//System.out.println(jlist);
cr.jList.updateUI();
}
else if(stemp.equals("@updatajlist"))
{
cr.jList.updateUI();
}
else if(stemp.equals("@公告"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String text=s.substring(j,i);
cr.jTextArea2.setText(text.replace((char)257,'\n'));
}
else if(stemp.equals("@seteditable"))
{
cr.jTextArea2.setEditable(true);
cr.addkeylistener();
}
else if(stemp.equals("@errors"))
{
int j=++i;
while(i<s.length()&&s.charAt(i)!='$')i++;
String serror=s.substring(j,i);
JOptionPane.showMessageDialog(null,serror);
//System.out.println(serror);
}
/*if(cr!=null)
{
cr.jList.updateUI(); //bug?
}*/
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
in.close();
out.close();
m_socket.close();
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
}
public static void main(String[] args)
{
NewChatClient ncc=new NewChatClient();
mc=ncc.new MainClient();
mc.setVisible(true);
// TODO 自动生成方法存根
}
class MainClient extends JFrame {
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private JLabel jLabel4 = null;
private JLabel jLabel5 = null;
private JTextField jTextField = null;
private JTextField jTextField1 = null;
private JPasswordField jPasswordField = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JButton jButton2 = null;
public MainClient() {
super();
initialize();
}
private void initialize() {
this.setSize(400, 300);
this.setResizable(false);
this.setTitle("login");
this.setContentPane(getJContentPane());
this.setVisible(true);
this.setEditable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //..
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel5 = new JLabel();
jLabel5.setBounds(new Rectangle(9,140,56,25));
jLabel5.setText("用户密码:");
jLabel4 = new JLabel();
jLabel4.setBounds(new Rectangle(9,98,59,25));
jLabel4.setText("用户帐号:");
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(7,38,63,25));
jLabel1.setText("服务器IP:");
jLabel = new JLabel();
jLabel.setBounds(new Rectangle(120,3,234,25));
jLabel.setText(" ");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabel, null);
jContentPane.add(jLabel1, null);
jContentPane.add(jLabel4, null);
jContentPane.add(jLabel5, null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJTextField1(), null);
jContentPane.add(getJPasswordField(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(getJButton2(), null);
}
return jContentPane;
}
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(91,41,160,20));
}
return jTextField;
}
private JTextField getJTextField1() {
if (jTextField1 == null) {
jTextField1 = new JTextField();
jTextField1.setBounds(new Rectangle(91,100,111,20));
}
return jTextField1;
}
private JPasswordField getJPasswordField() {
if (jPasswordField == null) {
jPasswordField = new JPasswordField();
jPasswordField.setBounds(new Rectangle(91,140,149,20));
}
return jPasswordField;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new java.awt.Rectangle(53,197,80,25));
jButton.setText("注册");
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated Event stub actionPerformed()
jButtonactionPerformed(e);
}
});
}
return jButton;
}
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new java.awt.Rectangle(238,197,80,25));
jButton1.setText("确定");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// TODO Auto-generated Event stub actionPerformed()
try
{
jButton1actionPerformed(e);
}
catch(Exception ee)
{
}
}
});
}
return jButton1;
}
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setBounds(new java.awt.Rectangle(294,39,80,22));
jButton2.setText("连接");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
jButton2actionPerformed(e);
}
});
}
return jButton2;
}
void setEditable(boolean flag)
{
jTextField1.setEditable(flag);
jPasswordField.setEditable(flag);
jButton.setEnabled(flag);
jButton1.setEnabled(flag);
jLabel4.setEnabled(flag);
jLabel5.setEnabled(flag);
jTextField.setEditable(!flag);
jButton2.setEnabled(!flag);
}
void jButton2actionPerformed(ActionEvent e) //连接
{
//System.out.println("连接jButton2actionPerformed()");
String s=jTextField.getText();
if(connect(s))
{
jButton2.setText("连接ing");
jLabel.setText("连接成功");
if(jTextField.getText().equals("")) jTextField.setText("localhost");
this.setEditable(true);
}
else
{
jLabel.setText("连接失败");
}
}
void jButtonactionPerformed(ActionEvent e) //注册
{
//System.out.println("注册actionPerformed()");
rs=new Register();
rs.setVisible(true);
this.setVisible(false);
}
void jButton1actionPerformed(ActionEvent e) throws Exception //确定
{
//System.out.println("确定actionPerformed()");
String sname=jTextField1.getText();
String spsw=String.valueOf(jPasswordField.getPassword());
out.println("@login$"+sname+"$"+spsw+"$");
//System.out.println("@login?$"+name+"$"+psw+"$");
}
}
class ChatRoom extends JFrame implements ActionListener,MouseListener,ListSelectionListener,KeyListener{
private JPanel jContentPane = null;
private JPanel jPanel = null;
private JPanel jPanel1 = null;
private JPanel jPanel2 = null;
private JTextArea jTextArea = null;
private JTextArea jTextArea1 = null;
private JLabel jLabel = null;
private JTextField jTextField = null;
private JLabel jLabel1 = null;
private JTextField jTextField1 = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JPanel jPanel3 = null;
private JPanel jPanel4 = null;
private JTextArea jTextArea2 = null;
private JList jList = null;
int oldkey=0;
int newkey=0;
javax.swing.Timer timer=new javax.swing.Timer(500,this);
public ChatRoom() {
super();
initialize();
timer.start();
}
private void initialize() {
this.setSize(481,407);
this.setContentPane(getJContentPane());
this.setTitle("ChatRoom");
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //..
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -