testchatclient.java

来自「java聊天室客户端」· Java 代码 · 共 304 行

JAVA
304
字号

package C;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;

public class TestChatClient implements ActionListener
{
	JFrame frame; 
	JPanel panel1;
	JPanel panel2;
	JPanel panel3;
	JPanel panel4;
	JPanel panel5;
	JPanel panel6;

    JMenuBar menubar;
    JMenu menu_operate;
    JMenu menu_setting;
    JMenu menu_help;
   
    JMenuItem menuItem_enter;
    JMenuItem menuItem_logout;
    JMenuItem menuItem_quit;
    
    JMenuItem menuItem_usersetting;
    JMenuItem menuItem_connectsetting;
    JMenuItem menuItem_help;
    JToolBar toolBar;
    JButton button_usersetting;
    JButton button_connectsetting;
    JButton button_enter;
    JButton button_logout;
    JButton button_quit;
    static JTextArea textArea;
    JScrollPane js;
	
   	    
    JLabel label1;
    JComboBox comboBox1;
    JLabel label2;
    JComboBox comboBox2;
    JCheckBoxMenuItem checkbox;
    
    JLabel label3;
    JTextField textField_message;
    JButton button_send;
    
    JTextField textField_info;
    
    static Socket socket;
    String ip = "127.0.0.1";
	int port = 8888;
	String username = "匆匆过客";
	static DataOutputStream output;
	static DataInputStream input;
	static ClientThread clientThread;

	
	public static void main(String[] args)
	{
	    new TestChatClient().client();
	}
    
    public void client(){
    	frame = new JFrame("聊天室客户端");
		panel1 = new JPanel();
		panel2 = new JPanel();
		panel3 = new JPanel();
		panel4 = new JPanel();
		panel5 = new JPanel();
		panel6 = new JPanel();
	
	
        panel1.setLayout(new BorderLayout());
        panel2.setLayout(new BorderLayout());
        panel3.setLayout(new BorderLayout());
        panel4.setLayout(new BorderLayout());
    
	    menubar = new JMenuBar();
	    menu_operate = new JMenu("操作");
	    menu_setting = new JMenu("设置");
	    menu_help = new JMenu("帮助");
	    menubar.add(menu_operate);
	    menubar.add(menu_setting);
	    menubar.add(menu_help);	   
	    
	    menuItem_enter = new JMenuItem("用户登录");
	    menuItem_enter.addActionListener(this);
	    menuItem_logout = new JMenuItem("用户注销");
	    menuItem_logout.addActionListener(this);
	    menuItem_quit = new JMenuItem("退出");
	    menuItem_quit.addActionListener(this);
	    menu_operate.add(menuItem_enter);
	    menu_operate.add(menuItem_logout);
	    menu_operate.add(menuItem_quit);
	    
        menuItem_usersetting = new JMenuItem("用户设置");
        menuItem_usersetting.addActionListener(this);
        menuItem_connectsetting = new JMenuItem("连接设置");
        menuItem_connectsetting.addActionListener(this);
        menu_setting.add(menuItem_usersetting);
        menu_setting.add(menuItem_connectsetting);        
        menuItem_help = new JMenuItem("帮助");
        menuItem_help.addActionListener(this);
        menu_help.add(menuItem_help);
        
        toolBar = new JToolBar();
        button_usersetting = new JButton("用户设置");
        button_usersetting.addActionListener(this);
        button_connectsetting = new JButton("连接设置");
        button_connectsetting.addActionListener(this);
        button_enter = new JButton("登录");
        button_enter.addActionListener(this);
        button_logout = new JButton("注销");
        button_logout.addActionListener(this);
        button_quit = new JButton("退出");
        button_quit.addActionListener(this);
        toolBar.add(button_usersetting);
        toolBar.add(button_connectsetting);
        toolBar.addSeparator();
        toolBar.add(button_enter);
        toolBar.add(button_logout);
        toolBar.addSeparator();
        toolBar.add(button_quit);
       
	    textArea = new JTextArea(15,25);
	    textArea.setLineWrap(true);
	    js = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
	   	    
	    label1 = new JLabel("发送至:");
	    String[] s1 = {"所有人"};
	    comboBox1 = new JComboBox(s1);
	    label2 = new JLabel("表情:");
	    String[] s2 = {"微笑地","高兴地","轻轻地","生气地","小心地","静静地"};
	    comboBox2 = new JComboBox(s2);
	    checkbox = new JCheckBoxMenuItem("悄悄话");
	    
	    label3 = new JLabel("发送消息:");
	    textField_message = new JTextField(16);
	    button_send = new JButton("发送");
	    button_send.addActionListener(this);
	    
	    textField_info = new JTextField();

        panel1.add(menubar); 
        panel5.add(label3);
        panel5.add(textField_message);
        panel5.add(button_send);
        panel2.add(textField_info);
          
        panel6.add(label1);
        panel6.add(comboBox1);
        panel6.add(label2);
        panel6.add(comboBox2);
        panel6.add(checkbox);
        
        panel4.add(js,BorderLayout.NORTH);
        panel4.add(panel6,BorderLayout.SOUTH);
        
        panel3.add(toolBar,BorderLayout.NORTH);
        panel3.add(panel4,BorderLayout.CENTER);
        panel3.add(panel5,BorderLayout.SOUTH);

        frame.add(panel1,BorderLayout.NORTH);
        frame.add(panel2,BorderLayout.SOUTH);
        frame.add(panel3);
      
	    frame.pack();
	    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		frame.setLocation((d.width - frame.getWidth())/2
				,(d.height - frame.getHeight())/2);
	    frame.setResizable(false);	    
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    frame.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e){
    	String s = e.getActionCommand();
    	if(s.equals("用户设置")){
			User user = new User();
			user.init();
    	}else if(s.equals("连接设置")){
    		Connect connect = new Connect();
    		connect.init();
    	}else if(s.equals("登录") || s.equals("用户登录")){
    		Enter();
    		

    	}else if(s.equals("注销") || s.equals("用户注销")){
    		Logout();
    	}else if(s.equals("退出")){
    		int result = JOptionPane.showConfirmDialog(null,"真的要退出吗?","退出",JOptionPane.YES_NO_OPTION);
			if(result == JOptionPane.OK_OPTION){
				System.exit(0);
			}
    	}else if(s.equals("帮助")){
			JOptionPane.showMessageDialog(null,"1、设置所要连接服务端的IP地址和端口"+
												"(默认设置为\n      127.0.0.1:8888)。\n"+
												"2、输入你的用户名(默认设置为:匆匆过客)。\n"+
												"3、点击“登录”便可以连接到指定的服务器;\n"+
												"      点击“注销”可以和服务器端开连接。\n"+
												"4、选择需要接受消息的用户,在消息栏中写入消息,\n"+
												"      同时选择表情,之后便可发送消息。\n","帮助",JOptionPane.PLAIN_MESSAGE);
		}else if(s.equals("发送")){
			SendMessage();
		}
    }
    
    public void Enter(){
    	try
		{
			socket = new Socket(ip,port);
			
			OutputStream os = socket.getOutputStream();
			output = new DataOutputStream(os);
			InputStream is = socket.getInputStream(); 
			input = new DataInputStream(is);
			
			clientThread = new ClientThread();
	        clientThread.start();	
			
	        String username = User.userName + "上线...."+"\n";
	        output.writeUTF(username);

			
			
		}
		catch (UnknownHostException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	
    }
    
    public void Logout(){
   		try
		{
   			output.writeUTF("用户下线");
   			input.close();
			output.close();
			socket.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		textArea.append("已经与服务器断开连接...\n");
    }
    
    public void SendMessage(){
		    	
		username = User.userName + " ";
    	String status  = "";
		if(checkbox.isSelected()){
			status = "说悄悄话 ";
		}
		
		String action = comboBox2.getSelectedItem().toString() + " ";
		String msg =  username + action + status + textField_message.getText() + "\n";
		textArea.append(msg);
		
		try
		{
			output.writeUTF(msg);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
	}
}

⌨️ 快捷键说明

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