📄 chatclient.java
字号:
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 + -