Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. package cliente;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.EOFException;
  8. import java.io.IOException;
  9. import java.net.InetAddress;
  10. import java.net.ServerSocket;
  11. import java.net.Socket;
  12. import java.util.concurrent.ExecutorService;
  13. import java.util.concurrent.Executors;
  14. import java.util.logging.Level;
  15. import java.util.logging.Logger;
  16. import javax.swing.*;
  17.  
  18. /**Clase que se encarga de correr los threads de enviar y recibir texto
  19.  * y de crear la interfaz grafica.
  20.  *
  21.  * @author Rafa
  22.  */
  23. public class PrincipalChat extends JFrame{
  24.     public JTextField campoTexto; //Para mostrar mensajes de los usuarios
  25.     public JTextArea areaTexto; //Para ingresar mensaje a enviar
  26.     private static ServerSocket servidor; //
  27.     private static Socket cliente; //Socket para conectarse con el cliente
  28.     private static String ip = "127.0.0.1"; //ip a la cual se conecta
  29.    
  30.     public static PrincipalChat main;
  31.    
  32.     public PrincipalChat(){
  33.         super("Cliente"); //Establece titulo al Frame
  34.  
  35.         campoTexto = new JTextField(); //crea el campo para texto
  36.         campoTexto.setEditable(false); //No permite que sea editable el campo de texto
  37.         add(campoTexto, BorderLayout.NORTH); //Coloca el campo de texto en la parte superior
  38.        
  39.        
  40.         areaTexto = new JTextArea(); //Crear displayArea
  41.         areaTexto.setEditable(false);
  42.         add(new JScrollPane(areaTexto), BorderLayout.CENTER);
  43.         areaTexto.setBackground(Color.orange); //Pone de color cyan al displayArea
  44.         areaTexto.setForeground(Color.BLACK); //pinta azul la letra en el displayArea
  45.         campoTexto.setForeground(Color.BLACK); //pinta toja la letra del mensaje a enviar
  46.        
  47.        
  48.         //Crea menu Archivo y submenu Salir, ademas agrega el submenu al menu
  49.         JMenu menuArchivo = new JMenu("Archivo");
  50.         JMenuItem salir = new JMenuItem("Salir");
  51.         menuArchivo.add(salir); //Agrega el submenu Salir al menu menuArchivo
  52.        
  53.         JMenuBar barra = new JMenuBar(); //Crea la barra de menus
  54.         setJMenuBar(barra); //Agrega barra de menus a la aplicacion
  55.         barra.add(menuArchivo); //agrega menuArchivo a la barra de menus
  56.        
  57.         //Accion que se realiza cuando se presiona el submenu Salir
  58.         salir.addActionListener(new ActionListener() { //clase interna anonima
  59.                 public void actionPerformed(ActionEvent e) {
  60.                     System.exit(0); //Sale de la aplicacion
  61.                 }
  62.         });
  63.        
  64.         setSize(300, 320); //Establecer tamano a ventana
  65.         setVisible(true); //Pone visible la ventana
  66.     }
  67.    
  68.     //Para mostrar texto en displayArea
  69.     public void mostrarMensaje(String mensaje) {
  70.         areaTexto.append(mensaje + "\n");
  71.     }
  72.     public void habilitarTexto(boolean editable) {
  73.         campoTexto.setEditable(editable);
  74.     }
  75.    
  76.     /**
  77.      * @param args the command line arguments
  78.      */
  79.     public static void main(String[] args) {
  80.         PrincipalChat main = new PrincipalChat(); //Instanciacion de la clase Principalchat
  81.         main.setLocationRelativeTo(null);   //Centrar el JFrame
  82.         main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //habilita cerrar la ventana
  83.         ExecutorService executor = Executors.newCachedThreadPool(); //Para correr los threads
  84.  
  85.         try {
  86.             main.mostrarMensaje("Buscando Servidor ...");
  87.             cliente = new Socket(InetAddress.getByName(ip), 11111); //comunicarme con el servidor
  88.             main.mostrarMensaje("Conectado a :" + cliente.getInetAddress().getHostName());
  89.    
  90.             main.habilitarTexto(true); //habilita el texto
  91.            
  92.             //Ejecucion de los Threads
  93.             executor.execute(new ThreadRecibe(cliente, main));
  94.             executor.execute(new ThreadEnvia(cliente, main));
  95.            
  96.         } catch (IOException ex) {
  97.             Logger.getLogger(PrincipalChat.class.getName()).log(Level.SEVERE, null, ex);
  98.         } //Fin del catch
  99.         finally {
  100.         }
  101.         executor.shutdown();
  102.     }
  103. }