⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatclient.java

📁 java 聊天程序(c/s)适合初学者使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            messageText.setEnabled(false);
            connect.stop();
            message(res.getString("Done"));
            connectButton.setEnabled(true);
        }
    }
  }

private javax.swing.JToolBar North;
private static javax.swing.JTextField nameText;
private javax.swing.JComboBox serverCombo;
private javax.swing.JTextField portText;
private javax.swing.JToggleButton connectButton;
private javax.swing.JToolBar South;
private javax.swing.JTextField messageText;
private javax.swing.JButton sendButton;
private javax.swing.JSplitPane SplitPane;
private javax.swing.JScrollPane UserScroll;
public javax.swing.JTree userTree;
private javax.swing.JScrollPane messageScroll;
private javax.swing.JTree msgTree;

    public void message(String msg)
    {
        java.util.Calendar rightNow = java.util.Calendar.getInstance();
        addMsg(Integer.toString(rightNow.get(java.util.Calendar.MONTH))+res.getString("KEY") + Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH))+res.getString("BLANK") +Integer.toString(rightNow.get(java.util.Calendar.HOUR_OF_DAY))+res.getString("KEY1")+Integer.toString(rightNow.get(java.util.Calendar.MINUTE))+res.getString("KEY2")+msg);
    }
    public static void clear()
    {
        msgRoot.removeAllChildren();
        msgModel.reload();
    }
    //applet-standalone
    public static void main(String[] args)
    {
        ChatClient applet=new ChatClient();
        applet.isStandalone = true; 
        javax.swing.JFrame frame = new javax.swing.JFrame();
        frame.setTitle(applet.res.getString("Chat_Client"));
        frame.getContentPane().add(applet, java.awt.BorderLayout.CENTER);
        applet.init();
        applet.start();
        frame.setSize(500,360);
        java.awt.Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
        frame.addWindowListener (new java.awt.event.WindowAdapter () {
            public void windowClosing (java.awt.event.WindowEvent evt) {
                exitForm (evt);
            }
        }
        );
        frame.setVisible(true);
    }
    private static void exitForm(java.awt.event.WindowEvent evt) {
        try
        {
        		connect.stop();
		  } catch(Exception e) {}
        System.exit(0);
    }
    public void stop()
    {
    	  try
        {
        		connect.stop();
		  } catch(Exception e) {}
        System.exit(0);
	 }
    public String getUserName()
    {
    	return nameText.getText();
    }
    public javax.swing.tree.DefaultMutableTreeNode addUsermsg(Object child) {
        javax.swing.tree.DefaultMutableTreeNode parentNode = null;
        javax.swing.tree.TreePath parentPath=null;

        if (parentPath == null) {
            parentNode = userRoot;
        } else {
            parentNode = (javax.swing.tree.DefaultMutableTreeNode)
                         (parentPath.getLastPathComponent());
        }

        return addUsermsg(parentNode, child, true);
    }

    public javax.swing.tree.DefaultMutableTreeNode addUsermsg(javax.swing.tree.DefaultMutableTreeNode parent,
                                            Object child) {
        return addUsermsg(parent, child, false);
    }

    public javax.swing.tree.DefaultMutableTreeNode addUsermsg(javax.swing.tree.DefaultMutableTreeNode parent,
                                            Object child, 
                                            boolean shouldBeVisible) {
        javax.swing.tree.DefaultMutableTreeNode childNode = new javax.swing.tree.DefaultMutableTreeNode(child);

        if (parent == null) {
            parent = userRoot;
        }
        usrModel.insertNodeInto(childNode, parent, parent.getChildCount());
        if (shouldBeVisible) {
            userTree.scrollPathToVisible(new javax.swing.tree.TreePath(childNode.getPath()));
        }
        return childNode;
    }
    //----------------
	public javax.swing.tree.DefaultMutableTreeNode addMsg(Object child) {
        javax.swing.tree.DefaultMutableTreeNode parentNode = null;
        javax.swing.tree.TreePath parentPath=null;

        if (parentPath == null) {
            parentNode = msgRoot;
        } else {
            parentNode = (javax.swing.tree.DefaultMutableTreeNode)
                         (parentPath.getLastPathComponent());
        }

        return addMsg(parentNode, child, true);
    }

    public javax.swing.tree.DefaultMutableTreeNode addMsg(javax.swing.tree.DefaultMutableTreeNode parent,Object child) {
        return addMsg(parent, child, false);
    }

    public javax.swing.tree.DefaultMutableTreeNode addMsg(javax.swing.tree.DefaultMutableTreeNode parent,Object child,boolean shouldBeVisible) {
        javax.swing.tree.DefaultMutableTreeNode childNode = new javax.swing.tree.DefaultMutableTreeNode(child);

        if (parent == null) {
            parent = msgRoot;
        }
        msgModel.insertNodeInto(childNode, parent, parent.getChildCount());

        if (shouldBeVisible) {
            msgTree.scrollPathToVisible(new javax.swing.tree.TreePath(childNode.getPath()));
        }
        return childNode;
    }
//------------------------
    public void errorReturn()
    {
    		connectButton.setText(res.getString("Connect"));
         serverCombo.setEnabled(true);
         portText.setEnabled(true);
         nameText.setEnabled(true);
         sendButton.setEnabled(false);
         messageText.setEnabled(false);
         connectButton.setSelected(false);
         connectButton.setEnabled(true);
	 }
	 public void removeUser(String name)
	 {
      int x;
      String Child;
	 		for(x=0;x<userRoot.getChildCount();x++)
			{
        Child =usrModel.getChild(userRoot,x).toString();
			  if(Child.equals(name)) break;
			}
      if(x!=userRoot.getChildCount())
      {
        usrModel.removeNodeFromParent((javax.swing.tree.MutableTreeNode) usrModel.getChild(userRoot, x));
      }else
      {
        System.out.println(res.getString("error_couldn_t_remove"));
      }
	 }
}

//TCP-Connect------------------------------------------------------------------------------------
class TcpConnect implements Runnable
{
    String server;
    ResourceBundle res = ResourceBundle.getBundle("Res");
    int port;
    String fromServer=null;
    java.io.BufferedReader in;
    java.io.PrintWriter out;
    java.net.Socket Socket;
    Thread t;
    ChatClient cc=null;
    boolean initover=false;

    TcpConnect(String s, int p, ChatClient c)
    {
        server = s;
        port = p;
        cc=c;
        cc.userTree.setVisible(false);
        t = new Thread(this);
        t.start();
    }

    public void run() {
        try {
            Socket = new java.net.Socket(server, port);
            out = new java.io.PrintWriter(Socket.getOutputStream(), true);
            in = new java.io.BufferedReader(new java.io.InputStreamReader(Socket.getInputStream()));
        } catch (java.net.UnknownHostException e) {
        		cc.message(res.getString("_nCannot_resolve")+server+res.getString("KEY3"));
            System.err.println(res.getString("Cannot_resolve")+server+res.getString("KEY3"));
            cc.errorReturn();
            stop();
        } catch (java.io.IOException e) {
            cc.message(res.getString("_nCould_not_connect")+server+res.getString("KEY3"));
            System.err.println(res.getString("Couldn_t_get_I_O_for")+server+res.getString("KEY3"));
            cc.errorReturn();
            stop();
        }
        java.io.BufferedReader stdIn = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
		  //send name
		  send(cc.getUserName());
        try
        {
            while ((fromServer = in.readLine()) != null)
            {
                if (fromServer.equals(res.getString("Bye_")))
                {
                    cc.message(res.getString("Server_closed"));
                	  cc.errorReturn();
                    stop();
                    break;
                }
                else if(fromServer.equals(res.getString("Cls")))
                {
                    ChatClient.clear();
                }
                else if(fromServer.equals(res.getString("addUser")))
                {
                		cc.addUsermsg(in.readLine());
                    if(initover) try{cc.userenter.play();} catch(Exception e) {};
		            }else if(fromServer.equals(res.getString("removeUser")))
                {
		                cc.removeUser(in.readLine());
                    if(initover) try{cc.userleave.play();} catch(Exception e) {};
                }else if(fromServer.equals(res.getString("initover")))
                {
		                initover=true;
                    cc.userTree.setVisible(true);
                }
                else
                {
                    cc.message(fromServer);
                    if(initover) try{cc.newmsg.play();} catch(Exception e) {};
                }
            }
            //insert emergency socket/connect thread closing
        }catch(java.io.IOException e) {
            System.err.println(res.getString("Client Socket Closed"));
        }
    }

    public void send(String msg)
    {
        out.println(msg);
    }
    
    public void stop()
    {
        try
        {
            send(res.getString("Bye"));
            if(cc.isStandalone) t.stop();
            out.close();
            in.close();
            Socket.close();
        }catch(java.io.IOException e) {
            System.err.println(res.getString("Error_Line_309"));
        }
    }
}




/* THINGS TO DO!!!!
Add user display code-Done!
Scroll the message area -DONE
get bug which connects when not connecting
so you casn press enter at send message text - DONE
add color changer for messageArea? or change to a tree - Changed to tree
change protocol codes to inledgible

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -