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

📄 simplemultichatclientui.java

📁 在一個多人連線伺服器中
💻 JAVA
字号:
package onlyfun.caterpillar.netapp;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import onlyfun.caterpillar.simplenet.SimpleConnectionClient;
import java.io.*;

public class SimpleMultiChatClientUI extends JFrame {
    private Container container;
    private JTextField nickNameTextField, serverAddrTextField, serverPortTextField;
    private JButton connectToServerBtn;
    private JTextArea messageTextArea, typeInTextArea;
    
    private SimpleConnectionClient chatClient;
    
	public SimpleMultiChatClientUI() {
	    super("Simple Multi Chat Client");
	    setUpUIComponent();
	    setUpEventListener();
	    setVisible(true);
	}
	
	private void setUpUIComponent() {
		setSize(600, 400);
		this.setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		container = getContentPane();
		JPanel panel = new JPanel();
		
		panel.setBorder(BorderFactory.createTitledBorder("Simple Multi Chat Client"));
        panel.setLayout(new FlowLayout(FlowLayout.LEFT));
        panel.add(new JLabel("Nickname"));
        panel.add(nickNameTextField = new JTextField(5));
        panel.add(new JLabel("Chat Room"));
        panel.add(serverAddrTextField = new JTextField(10));
        panel.add(new JLabel("Lucky Number"));
        panel.add(serverPortTextField = new JTextField(5));
        panel.add(connectToServerBtn = new JButton("bla bla"));
        
        messageTextArea = new JTextArea(13, 50);
        messageTextArea.setLineWrap(true);
        messageTextArea.setWrapStyleWord(true);
        messageTextArea.setEditable(false);
        panel.add(new JScrollPane(messageTextArea)); 
        
        typeInTextArea = new JTextArea(2, 50);
        typeInTextArea.setLineWrap(true);
        typeInTextArea.setEditable(false);
        panel.add(new JScrollPane(typeInTextArea));
        
        container.add(panel);
    }
	
	private void setUpEventListener() {
		connectToServerBtn.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                    	connectToServerBtn.setEnabled(false);
                    	chatClient = new SimpleConnectionClient();
               
                		messageTextArea.append("hello! every body...\n");
                		
                        new Thread(new Runnable(){
                            public void run() {
                            	try {
                          	        chatClient.connectToServer(serverAddrTextField.getText(), Integer.parseInt(serverPortTextField.getText()));
                          	        messageTextArea.append("hello! welcome you....\n");
                          	        typeInTextArea.setEditable(true);
                          	      
                          	        String serverHashCode = chatClient.getServerMessage();
                          	        String serverMessage;
                          	        while((serverMessage = chatClient.getServerMessage()) != null) {
                          	      	    // The multi chat server's hascode is necessary for notify a subServer
                          	      	    // that this is a main server's command.
                          	        	if(serverMessage.startsWith(serverHashCode)) {
                          	        		// The main server want to quit this connection.
                          	        		if(serverMessage.endsWith("quit"))
                          	        			throw new IOException("The Server has dropped your connection....");
                          	        	}
                          	        	
                          	        	messageTextArea.append(serverMessage + "\n");
                          	        	messageTextArea.setCaretPosition(messageTextArea.getText().length());
                          	        }
                            	}
                            	catch(IOException ex) {
                            		chatClient.closeConnection();
                            		JOptionPane.showMessageDialog(null, ex.getMessage(),
                                            "info", JOptionPane.INFORMATION_MESSAGE);
                            		connectToServerBtn.setEnabled(true);
                            		typeInTextArea.setEditable(false);
                            	}
                            }
                        }).start();
                    }
                }
            );
		
		typeInTextArea.addKeyListener(
				new KeyListener() {
					public void keyPressed(KeyEvent e) {}
			        public void keyTyped(KeyEvent e) {}
			        public void keyReleased(KeyEvent e) {
			        	if(e.getKeyCode() == KeyEvent.VK_ENTER) {
			        		String message = nickNameTextField.getText() + " > " + typeInTextArea.getText();
			        		typeInTextArea.setText("");
			        		messageTextArea.setCaretPosition(messageTextArea.getText().length());
			        		chatClient.sendMessageToServer(message.replace('\n', ' '));
			        	}
			        }
				}
			);
	}
	
	public static void main(String[] args) {
		new SimpleMultiChatClientUI();
	}
}

⌨️ 快捷键说明

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