?? mainframe.java
字號:
package multiclientnew;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;import java.util.Vector; //引入Vector類,用于存儲客戶信息import java.util.StringTokenizer; //引入StringTokenizer類,用于信息分離/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class MainFrame extends JFrame { Socket socket=null; BufferedReader cin=null; PrintStream cout=null; String clientName=""; //用于存儲客戶登陸名稱 JPanel contentPane; JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel(); JTextField jTextField1 = new JTextField(); JTextField jTextField2 = new JTextField(); JTextField jTextField3 = new JTextField(); JTextField jTextField4 = new JTextField(); JLabel jLabel4 = new JLabel(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JButton jButton3 = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); JList jList1 = new JList(); JScrollPane jScrollPane2 = new JScrollPane(); JTextArea jTextArea1 = new JTextArea(); //Construct the frame public MainFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); jLabel1.setFont(new java.awt.Font("Dialog", 0, 14)); jLabel1.setText("服務(wù)器IP"); jLabel1.setBounds(new Rectangle(16, 20, 60, 23)); contentPane.setLayout(null); this.setSize(new Dimension(618, 317)); this.setTitle("多用戶信息廣播系統(tǒng)-客戶端"); jLabel2.setBounds(new Rectangle(204, 20, 36, 23)); jLabel2.setText("端口"); jLabel2.setFont(new java.awt.Font("Dialog", 0, 14)); jLabel3.setBounds(new Rectangle(315, 20, 60, 23)); jLabel3.setText("客戶名稱"); jLabel3.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField1.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField1.setText("127.0.0.1"); jTextField1.setBounds(new Rectangle(77, 20, 120, 23)); jTextField2.setBounds(new Rectangle(240, 20, 63, 23)); jTextField2.setText("6544"); jTextField2.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField3.setBounds(new Rectangle(382, 20, 104, 23)); jTextField3.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField3.setText(""); jTextField4.setText("hello"); jTextField4.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField4.setToolTipText(""); jTextField4.setBounds(new Rectangle(76, 61, 292, 23)); jLabel4.setBounds(new Rectangle(10, 61, 60, 23)); jLabel4.setText("聊天信息"); jLabel4.setFont(new java.awt.Font("Dialog", 0, 14)); jButton1.setBounds(new Rectangle(500, 20, 104, 28)); jButton1.setFont(new java.awt.Font("Dialog", 0, 14)); jButton1.setText("連接服務(wù)器"); jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this)); jButton2.setText("發(fā)送信息"); jButton2.addActionListener(new MainFrame_jButton2_actionAdapter(this)); jButton2.setFont(new java.awt.Font("Dialog", 0, 14)); jButton2.setBounds(new Rectangle(380, 61, 104, 28)); jButton3.setBounds(new Rectangle(501, 61, 104, 28)); jButton3.setFont(new java.awt.Font("Dialog", 0, 14)); jButton3.setText("斷開連接"); jButton3.addActionListener(new MainFrame_jButton3_actionAdapter(this)); jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setBounds(new Rectangle(11, 101, 274, 188)); jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane2.setBounds(new Rectangle(312, 104, 291, 186)); contentPane.add(jTextField3, null); contentPane.add(jLabel3, null); contentPane.add(jTextField2, null); contentPane.add(jLabel2, null); contentPane.add(jTextField1, null); contentPane.add(jLabel1, null); contentPane.add(jButton1, null); contentPane.add(jButton2, null); contentPane.add(jButton3, null); contentPane.add(jLabel4, null); contentPane.add(jTextField4, null); contentPane.add(jScrollPane1, null); contentPane.add(jScrollPane2, null); jScrollPane2.getViewport().add(jTextArea1, null); jScrollPane1.getViewport().add(jList1, null); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } class ReadMessageThread extends Thread{ public void run(){ String line=""; while(true){ try{ line = cin.readLine(); //從端口讀入一條信息 }catch (IOException e){ jTextArea1.append("輸入輸出異常\n"); } StringTokenizer st=new StringTokenizer(line,":"); String keyword=st.nextToken();//存儲關(guān)鍵字,判斷消息類型 if (keyword.equalsIgnoreCase("QUIT")){ //服務(wù)器同意斷開信息 try{ socket.close(); jTextArea1.append("接收到服務(wù)器同意斷開信息,套接字關(guān)閉\n"); }catch (IOException e){ jTextArea1.append("套接字關(guān)閉異常\n"); } this.stop(); } else if (keyword.equalsIgnoreCase("PEOPLE")){ //客戶列表信息 /*將客戶名稱分離到Vector中,然后將其顯示在下拉列表中*/ Vector imessage=new Vector(); while(st.hasMoreTokens()) imessage.addElement(st.nextToken()); jList1.setListData(imessage); }else{ //接收的是來自服務(wù)器的廣播信息 //將信息的余下內(nèi)容全部提取,并去掉首字符(冒號),并顯示 String message=st.nextToken("\0"); message=message.substring(1); jTextArea1.append(message+"\n"); } } }} void jButton1_actionPerformed(ActionEvent e) { try { //獲取服務(wù)器IP InetAddress ip=InetAddress.getByName(jTextField1.getText());int port=Integer.parseInt(jTextField2.getText()); //獲取服務(wù)器端口 socket= new Socket(ip,port); //與服務(wù)器連接 jTextArea1.append("系統(tǒng)提示:與服務(wù)器開始連接...... \n"); } catch (IOException e1) { //捕捉可能產(chǎn)生的異常 jTextArea1.append("服務(wù)器端口打開出錯\n"); } if (socket != null) { //連接成功 jTextArea1.append("系統(tǒng)提示:與服務(wù)器連接成功...... \n"); clientName=jTextField3.getText().trim(); //獲得客戶連接的名稱 try { //創(chuàng)建輸入流 cin=new BufferedReader(new InputStreamReader(socket.getInputStream())); //創(chuàng)建輸出流 cout = new PrintStream(socket.getOutputStream()); //構(gòu)建客戶向服務(wù)器發(fā)送連接請求的信息,并發(fā)送到服務(wù)器 String str = "PEOPLE:"+clientName; cout.println(str); //創(chuàng)建讀服務(wù)器發(fā)送信息線程 ReadMessageThread readThread=new ReadMessageThread(); readThread.start(); }catch(IOException e3) { //捕捉可能產(chǎn)生的異常 jTextArea1.append("輸入輸出異常\n"); } } } void jButton2_actionPerformed(ActionEvent e) { String str=jTextField4.getText(); str="MSG:"+clientName+":"+str; cout.println(str); } void jButton3_actionPerformed(ActionEvent e) { String str="QUIT"; cout.println(str); jTextArea1.append("客戶請求斷開連接\n"); }}class MainFrame_jButton1_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton1_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton1_actionPerformed(e); }}class MainFrame_jButton2_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton2_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton2_actionPerformed(e); }}class MainFrame_jButton3_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton3_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton3_actionPerformed(e); }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -