📄 simplemultichatclientui.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 + -