可以? javaSwing 編程? 給妳個例子?
package com.xu.pcchart;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Clinet extends JFrame implements Runnable, ActionListener
{
private static final long serialVersionUID = 1L;
public static final int PORT? = 8521;
//聲明套接字對象
Socket socket;
//聲明線程對象
Thread thread1;
//聲明客戶端數據輸入輸出流
DataInputStream in;
DataOutputStream out;
//是否登錄的標記
boolean flag = false;
//聲明字符串,name存儲用戶名,chat_txt存儲發送的信息,chat_in存儲從服務器接收到的信息
String name,chat_txt,chat_in;
String ip = null;
/**
* 服務器端主程序負責界面以及服務端主線程ServerThread的啟動
* 服務主線程ServerThread又產生BroadCast及ClientThread線程
*/
//建立服務器端主界面所用到的布局方式
BorderLayout borderlayout1 = new BorderLayout();
BorderLayout borderlayout2 = new BorderLayout();
BorderLayout borderlayout3 = new BorderLayout();
//創建面板
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel3 = new JPanel();
JPanel jPanel4 = new JPanel();
//創建按鈕
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton("發送");
JScrollPane jScrollpanel = new JScrollPane();
//創建服務器端接收信息文本框
static? JTextArea jTextArea1 = new JTextArea();
boolean bool = false,start = false;
JLabel usernamelable = new JLabel("用戶名");
JTextField usernametext? = new JTextField(10);
JTextField sendmsgText? = new JTextField(20);
JLabel lable = new JLabel("服務器地址");
JTextField addresslable? =new JTextField("192.168.1.198",10);
//聲明ServerThread線程對象
ServerThread serverThread;
Thread thread;
//構造函數 ,生成客戶端界面
public Clinet()
?{ ?//設置內容分面板布局方式 ?getContentPane().setLayout(borderlayout1); ?//初始化組件 ?jButton1.setText("進入聊天室"); ?jButton1.addActionListener(this); ?jButton2.setText("退出聊天室"); ?jButton2.addActionListener(this); ?jButton3.addActionListener(this); ? ?//初始化JPanel1面板對象,並向其加入組件 ?this.getContentPane().add(jPanel1,java.awt.BorderLayout.NORTH); jPanel1.add(usernamelable); jPanel1.add(usernametext); ?jPanel1.add(jButton1); ?jPanel1.add(jButton2); ?//初始化jpanel2面板對象,並向其加入組件
?jTextArea1.setText(""); ?jPanel2.setLayout(borderlayout2); ? ?jPanel2.add(jScrollpanel,java.awt.BorderLayout.CENTER); ?jScrollpanel.getViewport().add(jTextArea1); ?this.getContentPane().add(jPanel2,java.awt.BorderLayout.CENTER); ?jPanel4.add(lable); ?jPanel4.add(addresslable); ?getContentPane().add(jPanel4,java.awt.BorderLayout.EAST); ? ?getContentPane().add(jPanel3,java.awt.BorderLayout.SOUTH); ?jPanel3.add(sendmsgText); ?jPanel3.add(jButton3); ?this.setSize(400,400); ?this.setVisible(true); ?}? ?public static void main(String[] args)
{
?Clinet server = new Clinet (); ? server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
//界面按鈕的事件處理
@Override
public void actionPerformed(ActionEvent e)
{
?//進入聊天室的按鈕處理 ?if(e.getSource() == jButton1) ?{ ?//獲取用戶名 ?name = usernametext.getText(); ?//獲取服務器IP ?ip = addresslable.getText(); ?//判斷用戶名是否有效及ip是否為空 ?if(name!="用戶名輸入"&&ip != null) ?{ ?try ?{ ?//創建socket對象 ?socket = new Socket(ip,PORT); ?//創建客戶端數據輸入輸出流,用於對服務器端發送或接收數據 ?in = new DataInputStream(socket.getInputStream()); ?out = new DataOutputStream(socket.getOutputStream()); ?Date now = new Date(System.currentTimeMillis()); ?SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss"); ?String nowStr = format.format(now); ?out.writeUTF("$$"+name+" "+nowStr+" 上線了!"); ?} catch (Exception e2) ?{ ?e2.printStackTrace(); ?} ?thread = new Thread(this); ?//開啟線程,監聽服務器端是否有消息 ?thread.start(); ?//說明已經登錄成功 ?flag = true; ?} ?} ?//發送按鈕的處理 ?else if(e.getSource() == jButton3) ?{ ?//獲取客戶端輸入的發言內容 ?chat_txt = sendmsgText.getText(); ?if(chat_txt != null) ?{ ?Date now = new Date(System.currentTimeMillis()); ?SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss"); ?String nowStr = format.format(now); ?//發言 向服務器發送發言的信息 ?try ?{ ?out.writeUTF("^-^"+usernametext.getText()+" "+nowStr+" 說\n"+chat_txt); ?} catch (Exception e2) ?{ ?// TODO: handle exception ?} ?} ?else ?{ ?try ?{ ?out.writeUTF("親說話");; ?} catch (Exception e2) ?{ ?// TODO: handle exception ?} ?} ?} ?//退出聊天室按鈕事件處理 ?else if(e.getSource() == jButton2) ?{ ?if(flag == true) ?{ ?try ?{ ?out.writeUTF("##"+name+"下線了!"); ? ?out.close(); ?in.close(); ?socket.close(); ? ?} catch (Exception e2) ?{ ?// TODO: handle exception ?} ?} ?flag = false; ?this.setVisible(false); ?}}
//客戶端線程啟動後的動作
@Override
public void run()
{
?//循環執行 作用是壹直監聽服務器端是否有消息 ?while(true) ?{ ?try ?{ ?//讀取服務器發送來的數據 ?chat_in = in.readUTF(); ?//將消息顯示在客戶端的對話窗口中 ?jTextArea1.append(chat_in+"\n\n"); ?} catch (Exception e) ?{ ?// TODO: handle exception ?} ? ?}}
}
運行結果
具體介紹請看java的? JDK 文檔