亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? clientgui.java

?? NonBlockingDeitelMessengerCaseStudy
?? JAVA
字號(hào):
// ClientGUI.java
// ClientGUI provides a user interface for sending and receiving
// messages to and from the DeitelMessengerServer.
package com.deitel.messenger;

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

public class ClientGUI extends JFrame {
   
   // JMenu for connecting/disconnecting server
   private JMenu serverMenu;
   
   // JTextAreas for displaying and inputting messages
   private JTextArea messageArea;
   private JTextArea inputArea;   
 
   // JButtons and JMenuItems for connecting and disconnecting
   private JButton connectButton;
   private JMenuItem connectMenuItem;   
   private JButton disconnectButton;
   private JMenuItem disconnectMenuItem;
   
   // JButton for sending messages
   private JButton sendButton;
   
   // JLabel for displaying connection status
   private JLabel statusBar;
   
   // userName to add to outgoing messages
   private String userName;
   
   // MessageManager for communicating with server
   private MessageManager messageManager;
   
   // MessageListener for receiving incoming messages
   private MessageListener messageListener;
 
   // ClientGUI constructor
   public ClientGUI( MessageManager manager ) 
   {       
      super( "Deitel Messenger" );
      
      // set the MessageManager
      messageManager = manager;
      
      // create MyMessageListener for receiving messages
      messageListener = new MyMessageListener();
      
      // create File JMenu      
      serverMenu = new JMenu ( "Server" );   
      serverMenu.setMnemonic( 'S' );
      JMenuBar menuBar = new JMenuBar();
      menuBar.add( serverMenu );
      setJMenuBar( menuBar );  
      
      // create ImageIcon for connect buttons
      Icon connectIcon = new ImageIcon( 
         getClass().getResource( "images/Connect.gif" ) );
      
      // create connectButton and connectMenuItem
      connectButton = new JButton( "Connect", connectIcon );
      connectMenuItem = new JMenuItem( "Connect", connectIcon );  
      connectMenuItem.setMnemonic( 'C' );
      
      // create ConnectListener for connect buttons
      ActionListener connectListener = new ConnectListener();
      connectButton.addActionListener( connectListener );
      connectMenuItem.addActionListener( connectListener ); 
      
      // create ImageIcon for disconnect buttons
      Icon disconnectIcon = new ImageIcon( 
         getClass().getResource( "images/Disconnect.gif" ) );
      
      // create disconnectButton and disconnectMenuItem
      disconnectButton = new JButton( "Disconnect", disconnectIcon );
      disconnectMenuItem = new JMenuItem( "Disconnect", disconnectIcon );      
      disconnectMenuItem.setMnemonic( 'D' );
      
      // disable disconnect buttons
      disconnectButton.setEnabled( false );
      disconnectMenuItem.setEnabled( false );
      
      // create DisconnectListener for disconnect buttons
      ActionListener disconnectListener = new DisconnectListener();
      disconnectButton.addActionListener( disconnectListener );
      disconnectMenuItem.addActionListener( disconnectListener );
      
      // add connect and disconnect JMenuItems to fileMenu
      serverMenu.add( connectMenuItem );
      serverMenu.add( disconnectMenuItem );           
  
      // add connect and disconnect JButtons to buttonPanel
      JPanel buttonPanel = new JPanel();
      buttonPanel.add( connectButton );
      buttonPanel.add( disconnectButton );
     
      // create JTextArea for displaying messages
      messageArea = new JTextArea();
      
      // disable editing and wrap words at end of line
      messageArea.setEditable( false );
      messageArea.setWrapStyleWord( true );
      messageArea.setLineWrap( true );
      
      // put messageArea in JScrollPane to enable scrolling
      JPanel messagePanel = new JPanel();
      messagePanel.setLayout( new BorderLayout( 10, 10 ) );
      messagePanel.add( new JScrollPane( messageArea ), 
         BorderLayout.CENTER );
      
      // create JTextArea for entering new messages
      inputArea = new JTextArea( 4, 20 );
      inputArea.setWrapStyleWord( true );
      inputArea.setLineWrap( true );
      inputArea.setEditable( false );
      
      // create Icon for sendButton
      Icon sendIcon = new ImageIcon( 
         getClass().getResource( "images/Send.gif" ) );
      
      // create sendButton and disable it
      sendButton = new JButton( "Send", sendIcon );
      sendButton.setEnabled( false );
      sendButton.addActionListener(

         new ActionListener() {
            
            // send new message when user activates sendButton
            public void actionPerformed( ActionEvent event )
            {
               messageManager.sendMessage( userName, 
                  inputArea.getText());
               
               // clear inputArea
               inputArea.setText("");
            }
         } 
      );
      
      // lay out inputArea and sendButton in BoxLayout and 
      // add Box to messagePanel
      Box box = new Box( BoxLayout.X_AXIS );
      box.add( new JScrollPane( inputArea ) );
      box.add( sendButton );
      messagePanel.add( box, BorderLayout.SOUTH );
      
      // create JLabel for statusBar with a recessed border
      statusBar = new JLabel( "Not Connected" );
      statusBar.setBorder( new BevelBorder( BevelBorder.LOWERED ) );

      // lay out components in JFrame
      Container container = getContentPane();
      container.add( buttonPanel, BorderLayout.NORTH );
      container.add( messagePanel, BorderLayout.CENTER );
      container.add( statusBar, BorderLayout.SOUTH );
      
      // add WindowListener to disconnect when user quits
      addWindowListener ( 

         new WindowAdapter () {
            
            // disconnect from server and exit application
            public void windowClosing ( WindowEvent event ) 
            {
               messageManager.disconnect( messageListener );
               System.exit( 0 );
            }
         }
      );

   } // end ClientGUI constructor
   
   // ConnectListener listens for user requests to connect to server
   private class ConnectListener implements ActionListener {
      
      // connect to server and enable/disable GUI components
      public void actionPerformed( ActionEvent event )
      {
         // connect to server and route messages to messageListener
         messageManager.connect( messageListener ); 

         // prompt for userName
         userName = JOptionPane.showInputDialog( 
            ClientGUI.this, "Enter user name:" );
         
         // clear messageArea
         messageArea.setText( "" );

         // update GUI components
         connectButton.setEnabled( false );
         connectMenuItem.setEnabled( false );
         disconnectButton.setEnabled( true );
         disconnectMenuItem.setEnabled( true );
         sendButton.setEnabled( true );
         inputArea.setEditable( true );
         inputArea.requestFocus();  
         statusBar.setText( "Connected: " + userName );                
      }   
      
   } // end ConnectListener inner class
   
   // DisconnectListener listens for user requests to disconnect
   // from DeitelMessengerServer
   private class DisconnectListener implements ActionListener {
      
      // disconnect from server and enable/disable GUI components
      public void actionPerformed( ActionEvent event )
      {
         // disconnect from server and stop routing messages
         // to messageListener
         messageManager.disconnect( messageListener );

         // update GUI componets
         sendButton.setEnabled( false );
         disconnectButton.setEnabled( false );
         disconnectMenuItem.setEnabled( false );
         inputArea.setEditable( false );
         connectButton.setEnabled( true );         
         connectMenuItem.setEnabled( true );
         statusBar.setText( "Not Connected" );         
      }
      
   } // end DisconnectListener inner class
   
   // MyMessageListener listens for new messages from MessageManager and 
   // displays messages in messageArea using MessageDisplayer.
   private class MyMessageListener implements MessageListener {

      // when received, display new messages in messageArea
      public void messageReceived( String from, String message ) 
      {
         // append message using MessageDisplayer and
         // invokeLater, ensuring thread-safe access messageArea
         SwingUtilities.invokeLater( 
            new MessageDisplayer( from, message ) );
      } 
   }  
   
   // MessageDisplayer displays a new messaage by appending the message to 
   // the messageArea JTextArea. This Runnable object should be executed 
   // only on the Event thread, because it modifies a live Swing component
   private class MessageDisplayer implements Runnable {
      private String fromUser;
      private String messageBody;
      
      // MessageDisplayer constructor
      public MessageDisplayer( String from, String body )
      {
         fromUser = from;
         messageBody = body;
      }
      
      // display new message in messageArea
      public void run() 
      {
         // append new message
         messageArea.append( "\n" + fromUser + "> " + messageBody );   

         // move caret to end of messageArea to ensure new 
         // message is visible on screen
         messageArea.setCaretPosition( messageArea.getText().length() );                          
      }      
      
   } // end MessageDisplayer inner class

} // end class ClientGUI


/**************************************************************************
 * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and               *
 * Prentice Hall. All Rights Reserved.                                    *
 *                                                                        *
 * DISCLAIMER: The authors and publisher of this book have used their     *
 * best efforts in preparing the book. These efforts include the          *
 * development, research, and testing of the theories and programs        *
 * to determine their effectiveness. The authors and publisher make       *
 * no warranty of any kind, expressed or implied, with regard to these    *
 * programs or to the documentation contained in these books. The authors *
 * and publisher shall not be liable in any event for incidental or       *
 * consequential damages in connection with, or arising out of, the       *
 * furnishing, performance, or use of these programs.                     *
 *************************************************************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产电影| 麻豆精品一二三| 天堂va蜜桃一区二区三区| 日韩精品欧美成人高清一区二区| 日韩电影免费一区| 国产99久久久国产精品免费看| 99精品欧美一区二区蜜桃免费 | 在线观看91av| 久久久综合视频| 中文字幕亚洲精品在线观看| 亚洲一区二区三区精品在线| 国内偷窥港台综合视频在线播放| 成人妖精视频yjsp地址| 欧美丝袜丝交足nylons图片| 久久综合久久久久88| 亚洲激情成人在线| 黄一区二区三区| 欧美午夜精品一区二区三区| 久久精品免费在线观看| 亚洲444eee在线观看| 成人一区二区三区在线观看| 4438x成人网最大色成网站| 国产精品人妖ts系列视频| 日韩主播视频在线| 成人午夜av影视| 欧美一级欧美三级| 一区二区三区日韩精品视频| 国产精品中文字幕日韩精品| 在线成人免费观看| 亚洲视频综合在线| 国模一区二区三区白浆| 欧美日韩在线播放一区| 国产精品欧美久久久久一区二区| 麻豆国产一区二区| 91黄色激情网站| 国产精品私房写真福利视频| 蜜桃精品视频在线观看| 欧美午夜精品理论片a级按摩| 国产精品视频一二三区| 裸体一区二区三区| 欧美三日本三级三级在线播放| 中文一区二区完整视频在线观看| 男人的天堂久久精品| 欧美在线观看你懂的| 中文字幕一区二区三区av | 精品久久人人做人人爱| 亚洲国产日韩在线一区模特| 成人白浆超碰人人人人| 精品国免费一区二区三区| 性感美女极品91精品| 日本高清无吗v一区| ㊣最新国产の精品bt伙计久久| 精品午夜久久福利影院| 欧美一区二区三区免费观看视频| 一区二区三区精密机械公司| 91在线视频观看| 国产精品少妇自拍| 丁香婷婷综合网| 精品盗摄一区二区三区| 久久精品国产**网站演员| 欧美精品在线观看一区二区| 伊人开心综合网| 日本精品一区二区三区四区的功能| 久久精品综合网| 精久久久久久久久久久| 精品人在线二区三区| 久草热8精品视频在线观看| 91精品国产aⅴ一区二区| 亚洲成人一二三| 欧美日韩免费一区二区三区视频| 亚洲国产三级在线| 欧美日韩一级片在线观看| 亚洲影院在线观看| 欧美亚洲国产一区二区三区va| 亚洲情趣在线观看| 色综合天天综合网天天狠天天| 亚洲少妇30p| 色综合色综合色综合色综合色综合 | 久久一区二区三区国产精品| 久久99国产精品尤物| 欧美精品一区二区三区蜜桃视频 | 宅男噜噜噜66一区二区66| 日本成人超碰在线观看| 日韩一区二区电影| 狠狠色综合色综合网络| 久久色中文字幕| 粉嫩av一区二区三区在线播放| 国产精品欧美一区喷水| 91美女在线看| 亚洲国产精品一区二区www在线| 欧美精品乱人伦久久久久久| 奇米精品一区二区三区四区| 久久综合九色欧美综合狠狠| 国产91在线看| 亚洲欧美另类图片小说| 欧美日韩一区二区三区在线| 奇米一区二区三区av| 久久精品日韩一区二区三区| 成人深夜视频在线观看| 亚洲精品视频观看| 欧美精品99久久久**| 国产一区二区三区免费观看| 国产精品无码永久免费888| 色欧美88888久久久久久影院| 亚洲成在线观看| xnxx国产精品| 色婷婷亚洲精品| 日韩av午夜在线观看| 久久精品一区八戒影视| 色婷婷激情久久| 久久精品国产一区二区三区免费看 | 午夜欧美一区二区三区在线播放| 日韩一二三区视频| 成人av在线一区二区| 亚洲国产精品麻豆| 久久久www成人免费毛片麻豆 | 亚洲欧美国产高清| 337p亚洲精品色噜噜狠狠| 国产美女在线观看一区| 亚洲欧美国产三级| 精品国产一区二区三区四区四| 成人午夜短视频| 日韩黄色片在线观看| 国产精品日产欧美久久久久| 在线不卡一区二区| 成人综合婷婷国产精品久久蜜臀 | 欧美老女人在线| 国产白丝网站精品污在线入口| 亚洲一区二区三区影院| 国产日韩欧美精品电影三级在线| 欧美熟乱第一页| 成人美女在线观看| 免费在线观看成人| 亚洲美女屁股眼交3| 久久网这里都是精品| 欧美色成人综合| 本田岬高潮一区二区三区| 日韩不卡一二三区| 亚洲精品视频在线| 中文字幕精品在线不卡| 日韩欧美国产一区二区在线播放 | 性做久久久久久| 一区在线观看视频| 久久久久国产免费免费| 欧美日高清视频| 一本到不卡免费一区二区| 国产美女精品人人做人人爽| 一区二区久久久| 国产精品视频免费看| 精品久久久久香蕉网| 欧美精品丝袜久久久中文字幕| 91在线免费视频观看| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩精品一级中文字幕精品视频免费观看| 国产精品久线观看视频| 欧美成va人片在线观看| 欧美日韩精品专区| 一本色道亚洲精品aⅴ| 成人高清在线视频| 欧美日韩久久不卡| 在线观看免费视频综合| 91香蕉视频mp4| 国产精品 欧美精品| 久久99精品国产| 免费成人在线影院| 日本成人在线不卡视频| 日韩专区在线视频| 亚洲mv大片欧洲mv大片精品| 一区二区三区四区国产精品| 国产精品高潮呻吟久久| 国产午夜亚洲精品理论片色戒| 精品国产亚洲在线| 欧美va日韩va| 欧美大片日本大片免费观看| 日韩欧美一二三区| 欧美一区二区三区电影| 8v天堂国产在线一区二区| 欧美人妖巨大在线| 欧美肥大bbwbbw高潮| 欧美裸体bbwbbwbbw| 欧美精品18+| 欧美一级午夜免费电影| 日韩一区二区精品| 欧美mv日韩mv国产网站| 精品精品国产高清a毛片牛牛| 精品久久五月天| 国产亚洲一区二区三区四区| 久久久精品2019中文字幕之3| 国产亚洲视频系列| 日本一区二区三区免费乱视频 | 白白色亚洲国产精品| 成人久久视频在线观看| 99这里只有精品| 欧美中文字幕一二三区视频| 欧美图片一区二区三区| 日韩一区二区三区电影| 亚洲精品在线一区二区| 国产免费久久精品| 亚洲欧美另类综合偷拍| 亚洲第一主播视频|