Swing實現界面,socket實現通信
package com.learn.talk; 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.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; public class ChatReceiver { private PrintWriter pw; private JFrame frame; private JPanel pane_buttom; private JSplitPane pane_center; // 顯示內容的文本框,輸入內容的文本框,發送內容按鈕 private JScrollPane pane_showWindow; private JScrollPane pane_inputWindow; private JTextArea area_showWindow; private JTextArea area_inputWindow; private JButton btn_send; private Dimension dimension;// 用於設置area_showWindow可拖拉的大小 // 初始化 public ChatReceiver() { frame = new JFrame(); pane_buttom = new JPanel(); pane_showWindow = new JScrollPane(); pane_inputWindow = new JScrollPane(); area_showWindow = new JTextArea(); area_inputWindow = new JTextArea(); pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow); btn_send = new JButton("send"); dimension = new Dimension(50, 300); } // 調用方法顯示窗口 public void showFrame() { initFrame(); initChatTextArea(); initButton(); btn_send(); socket(); } // 主窗體 public void initFrame() { frame.setTitle("簡繁"); int width = (int) Toolkit.getDefaultToolkit().getScreenSize() .getWidth(); int height = (int) Toolkit.getDefaultToolkit().getScreenSize() .getHeight(); frame.setBounds(width / 2, height / 2, 400, 450); frame.setVisible(true); } // 內容顯示文本框和輸入內容文本框 private void initChatTextArea() { // 取得視圖焦點 pane_showWindow.getViewport().add(area_showWindow); pane_inputWindow.getViewport().add(area_inputWindow); // 將顯示文本域設置為不可編輯 area_showWindow.setEditable(false); // 設置顯示文本域可拖拉的大小 pane_showWindow.setMinimumSize(dimension); frame.add(pane_center, BorderLayout.CENTER); } // 發送文件,發送內容按鈕 public void initButton() { pane_buttom.add(btn_send); frame.add(pane_buttom, BorderLayout.SOUTH); } private void btn_send() { btn_send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String info = area_inputWindow.getText(); area_showWindow.append("簡繁:" + info + "\r\n"); pw.println(info); area_inputWindow.setText(""); } }); } private void socket() { ServerSocket ss; try { ss = new ServerSocket(9988); // 等待連接 客戶端 Socket s = ss.accept(); InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); // PrintWriter必須和socket有密切的關系 pw = new PrintWriter(s.getOutputStream(), true); // 讀取從客戶端法發來的信息 while (true) { // 讀取從客戶端發來的信息 String info = br.readLine(); // 在文本欄里顯示 area_showWindow.append("garfield:" + info + "\r\n"); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { ChatReceiver chat = new ChatReceiver(); chat.showFrame(); } }
package com.learn.talk; 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.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; public class ChatSender { private PrintWriter pw; private JFrame frame; private JPanel pane_buttom; private JSplitPane pane_center; // 顯示內容的文本框,輸入內容的文本框,發送內容按鈕 private JScrollPane pane_showWindow; private JScrollPane pane_inputWindow; private JTextArea area_showWindow; private JTextArea area_inputWindow; private JButton btn_send; private Dimension dimension;// 用於設置area_showWindow可拖拉的大小 // 初始化 public ChatSender() { frame = new JFrame(); pane_buttom = new JPanel(); pane_showWindow = new JScrollPane(); pane_inputWindow = new JScrollPane(); area_showWindow = new JTextArea(); area_inputWindow = new JTextArea(); pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow); btn_send = new JButton("send"); dimension = new Dimension(50, 300); } // 調用方法顯示窗口 public void showFrame() { initFrame(); initChatTextArea(); initButton(); btn_send(); socket(); } // 主窗體 public void initFrame() { frame.setTitle("garfield"); int width = (int) Toolkit.getDefaultToolkit().getScreenSize() .getWidth(); int height = (int) Toolkit.getDefaultToolkit().getScreenSize() .getHeight(); frame.setBounds(width / 2, height / 2, 400, 450); frame.setVisible(true); } // 內容顯示文本框和輸入內容文本框 private void initChatTextArea() { // 取得視圖焦點 pane_showWindow.getViewport().add(area_showWindow); pane_inputWindow.getViewport().add(area_inputWindow); // 將顯示文本域設置為不可編輯 area_showWindow.setEditable(false); // 設置顯示文本域可拖拉的大小 pane_showWindow.setMinimumSize(dimension); frame.add(pane_center, BorderLayout.CENTER); } // 發送文件,發送內容按鈕 public void initButton() { pane_buttom.add(btn_send); frame.add(pane_buttom, BorderLayout.SOUTH); } private void btn_send() { btn_send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String info = area_inputWindow.getText(); area_showWindow.append("garfield: " + info + "\r\n"); pw.println(info); area_inputWindow.setText(""); } }); } private void socket() { try { Socket s = new Socket("127.0.0.1", 9988); InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); pw = new PrintWriter(s.getOutputStream(), true); while (true) { String info = br.readLine(); area_showWindow.append("簡繁: " + info + "\r\n"); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { ChatSender chat = new ChatSender(); chat.showFrame(); } }