1. 程式人生 > >java圖形介面聊天室簡版

java圖形介面聊天室簡版

這是服務端:
package server;

import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Calendar;

public class Server extends JFrame implements ActionListener{
	static JTextArea jta=null;
	JTextField jtf=null;
	JScrollPane jsp=null;
	JButton jb_send=null;
	JPanel jp=null;
	static Socket socket=null;
	static String text_message;
	public static void main(String[] args) throws IOException {
		ServerSocket server=null;
		new Server();
		try
		{
			server=new ServerSocket(8001);
			socket=server.accept();
		}
		catch(Exception e)
		{
			System.out.println("不能監聽:"+e);
		}	
		while(true)
		{
			BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			jta.append(br.readLine()+"\n");
		}
	}
	
	
	public Server(){
		jta=new JTextArea();
		jta.setEditable(false);
		jsp=new JScrollPane(jta);
		jtf=new JTextField(20);
		jp=new JPanel();
		jb_send=new JButton("傳送");
		jb_send.addActionListener(this);
		
		jp.add(jtf);
		jp.add(jb_send);
		this.add(jsp,"Center");
		this.add(jp,"South");
		this.setTitle("服務端");
		this.setSize(300, 200);
		this.setLocation(318,186);
		this.setResizable(false);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==jb_send)
		{
			if(jtf.getText().equals(""))
			{
				JOptionPane.showMessageDialog(null, "訊息不能為空");
			}
			else
			{
				text_message=jtf.getText();
				jta.append("服務端: "+Calendar.getInstance().getTime().toLocaleString()+" "+text_message+"\n");
				PrintWriter pw;
				try 
				{
					pw = new PrintWriter(socket.getOutputStream(),true);
					if(!text_message.equals(""))
					{
						pw.println("服務端: "+Calendar.getInstance().getTime().toLocaleString()+" "+text_message);
					}
				} 
				catch (IOException e1) 
				{
					e1.printStackTrace();
				}
				jtf.setText("");
			}
		}
	}
}







這是客戶端:
package client;

import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;

public class Client extends JFrame implements ActionListener{
	static JTextArea jta=null;
	JTextField jtf=null;
	JPanel jp=null;
	JButton jb_send=null;
	JScrollPane jsp=null;
	static String text_message;
	static Socket socket=null;
	public static void main(String[] args) throws IOException {
		new Client();
		socket=new Socket("127.0.0.1",8001);
		while(true)
		{
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			jta.append(is.readLine()+"\n");
		}
	}
	
	
	public Client()
	{
		jta=new JTextArea();
		jta.setEditable(false);
		jtf=new JTextField(20);
		jb_send=new JButton("傳送");
		jb_send.addActionListener(this);
		jp=new JPanel();
		jsp=new JScrollPane(jta);
		jp.add(jtf);
		jp.add(jb_send);
		
		this.add(jsp,"Center");
		this.add(jp,"South");
		this.setTitle("客戶端");
		this.setSize(300, 200);
		this.setLocation(636,186);
		this.setResizable(false);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}


	public void actionPerformed(ActionEvent e) 
	{
		if(e.getSource()==jb_send)
		{
			if(jtf.getText().equals(""))
			{
				JOptionPane.showMessageDialog(null, "訊息不能為空");
			}
			else
			{
				text_message=jtf.getText();
				try
				{	
					PrintWriter pw=null;
					pw=new PrintWriter(Client.socket.getOutputStream(),true);
						if(!text_message.equals(""))
						{
							pw.println("客戶端: "+Calendar.getInstance().getTime().toLocaleString()+" "+text_message);
						}
				}
				catch(Exception e1)
				{
					e1.printStackTrace();
				}
				jta.append("客戶端: "+Calendar.getInstance().getTime().toLocaleString()+" "+text_message+"\n");
				jtf.setText("");
			}
		}
	}
}

下面是效果圖: