Chat

To fazendo um programa de chat para apresentar na aula… com ajuda de um amigo ate consegui ir bem mais agora impaquei que nao consigo melhorar ele… colocando uma lista de usuarios e quando eu mandar uma msn a cor ficar diferente e quando eu receber uma msg tambem diferenciar das para outro e tipo mandar msg no reservado.

este e o codigo que estou usando para o cliente:

/*
 * Config.java
 *
 * Created on 1 de Maio de 2007, 10:23
 */

package cchat;

/**
 *
 * @author  Marcos
 */
public class Config extends javax.swing.JFrame {
    
    /** Creates new form Config */
    public Config() {
        initComponents();
      
    }
    
    private static janelaP jP=null;
    private static tredConexao t=null;

    
    
    private String lg="";
    private String mq="";
    private int p=10024;
    
     public  void inicio(){
        
        jP=new janelaP();
        jP.setVisible(true);
        t=new tredConexao();
        t.setaJanela(jP);
        t.setIp(jTextFieldIp.getText());
        int tp=Integer.parseInt(jTextFieldPorta.getText().trim());
        t.setPorta(tp);
        t.setLg(jTextFieldNome.getText().trim());
        
        t.start();
        dispose();
       
      
    }
    
   
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {//GEN-BEGIN:initComponents
        jTextFieldIp = new javax.swing.JTextField();
        jTextFieldPorta = new javax.swing.JTextField();
        jTextFieldNome = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextFieldPorta.setText("10024");

        jButton1.setText("Entrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("IP Servidor");

        jLabel2.setText("Porta");

        jLabel3.setText("Nome ");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(81, Short.MAX_VALUE)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 65, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jLabel2)
                    .add(jLabel3))
                .add(30, 30, 30)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jTextFieldNome)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jTextFieldPorta)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jTextFieldIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 158, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(66, 66, 66))
            .add(layout.createSequentialGroup()
                .add(165, 165, 165)
                .add(jButton1)
                .addContainerGap(170, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(49, 49, 49)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel1)
                    .add(layout.createSequentialGroup()
                        .add(jTextFieldIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(24, 24, 24)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(jTextFieldPorta, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jLabel2))
                        .add(19, 19, 19)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(jTextFieldNome, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jLabel3))))
                .add(38, 38, 38)
                .add(jButton1)
                .addContainerGap(45, Short.MAX_VALUE))
        );
        pack();
    }//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
          inicio();  
          
        

       // TODO adicione seu código de manipulação aqui:
    }//GEN-LAST:event_jButton1ActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Config().setVisible(true);
            }
        });
    }
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JTextField jTextFieldIp;
    private javax.swing.JTextField jTextFieldNome;
    private javax.swing.JTextField jTextFieldPorta;
    // Fim da declaração de variáveis//GEN-END:variables
    
}

/*
 * janelaP.java
 *
 * Created on 1 de Maio de 2007, 08:57
 */

package cchat;

/**
 *
 * @author  marcos
 */
public class janelaP extends javax.swing.JFrame {
    tredConexao tr=null;
    Config con=null;
    /** Creates new form janelaP */
    public janelaP() {
        initComponents();
    }
    
    public void settred(tredConexao t){
        tr=t;
        
    }
    
    public void setConfig(Config c){
        con=c;
        
    }
    public void atualiMsg(String m){   
        jTextAreaPri.setText(jTextAreaPri.getText()+m+"\n");
    }
    public void enviaMsg(String m){
        tr.envia(m);
    }
    
    public void atualiconec(String Nom){
        jTextArea1.setText(Nom);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextAreaPri = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextAreaEnv = new javax.swing.JTextArea();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jTextAreaPri.setColumns(20);
        jTextAreaPri.setRows(5);
        jScrollPane2.setViewportView(jTextAreaPri);

        jButton1.setText("Enviar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 710, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 27, Short.MAX_VALUE)
        );

        jTextAreaEnv.setColumns(20);
        jTextAreaEnv.setRows(5);
        jScrollPane1.setViewportView(jTextAreaEnv);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane3.setViewportView(jTextArea1);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 540, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 581, Short.MAX_VALUE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 87, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(36, 36, 36)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE)
                    .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 63, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 37, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
     String conec = "Conectado";
     enviaMsg(conec);
    }//GEN-LAST:event_formComponentShown

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
     String conec = "Desconectado";
     enviaMsg(conec);
     System.exit(0);
    }//GEN-LAST:event_formWindowClosing
   
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        enviaMsg(jTextAreaEnv.getText());// TODO adicione seu código de manipulação aqui:
        jTextAreaEnv.setText("");
    }//GEN-LAST:event_jButton1ActionPerformed
    
    public Config getConfig(){
        return con;
    }
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new janelaP().setVisible(true);
            }
        });
    }
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextArea jTextAreaEnv;
    private javax.swing.JTextArea jTextAreaPri;
    // Fim da declaração de variáveis//GEN-END:variables
    
}


package cchat;

import java.io.*;
import java.net.Socket;

public class tredConexao extends Thread {  
    private janelaP jP=null;
    private DataInputStream rec;
    private PrintStream env;
    private PrintStream conc;
    private String lg="";
    private int portanumero=10024;
    private String maquina="localhost";
     
    
    
    public tredConexao() {
    }
    
    public void setPorta(int p){
        portanumero=p;
    }
    
    public void setIp(String i){
        maquina=i;
    }
    
    public void setLg(String l){
        lg=l;
    }
    
    public void setaJanela(janelaP j){
        jP=j;
        jP.settred(this);
        
    }
    
    
    
   public void run () {  
       Socket MyClient;

       try{ 
            MyClient = new Socket(maquina, portanumero);
            rec = new DataInputStream(MyClient.getInputStream());//receber
            env = new PrintStream(MyClient.getOutputStream()); //enviar
            conc = new PrintStream(MyClient.getOutputStream()); //enviar
            recebe();  
       }  catch (IOException e) { } 
   }

   public void envia(String e){
            env.println(lg+" : "+e); 
   }
   public void conectado(String Lg){
            Lg = lg;
            conc.println(Lg);
   }
   public void recebe(){
       String r=null;
       while(true){
            try {
                sleep(500);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            try {
                r=rec.readLine();   
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            
            if (r.length()>2)
                jP.atualiMsg(r);
           
       }
   }
   
}

esta e a usada para o servidor


package chat;
import java.net.*;
import java.io.*;
public class myTread extends Thread{
    
    private Socket c;
    private DataInputStream socR;
    private PrintStream envi;
    private ServidorLog s;
    private String loguin=null;
    
public myTread(Socket c) throws IOException{
   this.c=c;
   socR = new DataInputStream(c.getInputStream());
   envi = new PrintStream(c.getOutputStream()); 
 }
 public void slog(ServidorLog se){
     s=se;
     
 }       

   String re="";
   
public String getLoguin(){
    return loguin;
} 
   
   public void run() {	
       
       s.tabelaTred(this);//add na tabela de treds
       boolean lg=true;
       
       while(true) {
            try { 
               re=socR.readLine();
               if (re!=null){
                    s.escrever(re+"\n");
               }
            } catch (IOException e) { 
              System.out.println("caio conexao");
              break;
            }
         }
   }
   
   public void envia(String s){
       envi.println(s);
   }
     
}


package chat;

import java.io.IOException;
import java.net.*;

public class Principal {
    
    
   private static ServidorLog s=new ServidorLog();
  
    
    /** Creates a new instance of Principal */
    public Principal() {
    }
    public static void main(String args[]) {
       iniciaConexao();

    }
  
    public  static void iniciaConexao(){
         s.setLocation(200,200);
         s.setVisible(true);
      
        while(true){
            Socket socket=null;
            ServerSocket serverSocket=null;
            myTread t=null;
            
            try {
                 try{
                serverSocket = new ServerSocket(10024); 
                               }catch (BindException ex){
                 System.exit(0); 
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }  
            System.out.println("Aguardando um conexão cliente");
            try{
                socket = serverSocket.accept(); 
            } catch (IOException ex) {
                ex.printStackTrace();}    
            
            try {
                t = new myTread(socket);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            t.slog(s);
            t.start();
            try {
                 serverSocket.close(); 
            } catch (IOException ex) {
                ex.printStackTrace();
            } 
        }
   }
    
    
}

/*
 * ServidorLog.java
 *
 * Created on 30 de Abril de 2007, 23:54
 */

package chat;

import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author  Marcos
 */
public class ServidorLog extends javax.swing.JFrame {
   
    
    ArrayList tabtread = new ArrayList();
    
    public ServidorLog() {
        initComponents();
    }
    
    public void escrever(String t){
        myTread m=null;
        jTextAreaLog.setText(jTextAreaLog.getText()+t);
        
        for (int i=0; i<tabtread.size();i++){
            m=(myTread) tabtread.get(i);
            m.envia(t);
        }
    }
    public void tabelaTred(myTread m){
        tabtread.add(m);
    }
    
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTextAreaLog = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setText("Destravar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Travar");
        jButton2.setPreferredSize(new java.awt.Dimension(83, 23));
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jTextAreaLog.setColumns(20);
        jTextAreaLog.setForeground(new java.awt.Color(255, 255, 255));
        jTextAreaLog.setRows(5);
        jTextAreaLog.setText("teste");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jTextAreaLog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 579, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(layout.createSequentialGroup()
                        .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jButton2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jTextAreaLog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 222, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(23, 23, 23)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jButton1)
                    .add(jButton2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
       jTextAreaLog.setForeground(Color.WHITE);
       jButton1.setEnabled(true);
       jButton2.setEnabled(false);  
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
      int senha = Integer.parseInt(JOptionPane.showInputDialog(null,"Senha","Digite a senha",1));
      if (senha == 260782){
          jTextAreaLog.setForeground(Color.BLACK);
          jButton2.setEnabled(true);
          jButton1.setEnabled(false);
      }else{
          JOptionPane.showMessageDialog(null,"senha incorreta");
      }
      senha = 0;
    }//GEN-LAST:event_jButton1ActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public  void main(String args[]) {
      java.awt.EventQueue.invokeLater(new Runnable() {
       public void run() {
         new ServidorLog().setVisible(true);
       }
       });
    }
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JTextArea jTextAreaLog;
    // Fim da declaração de variáveis//GEN-END:variables
    
}

gostaria de ajuda…

mano, seu problema é q vc ta usando JTextArea, mude para JTextPane ou JEditorPane na tela do cliente, com ele vc pode implementar um document e alterar as propriedades de um trecho do documento, alterando a cor e se quiser ateh inserindo imagens

Grato… tens como me ajudar e que nao to tendo tempo pra terminar de implementar… mais dois trabalhos grandes pra terminar…
se vc desse esta ajuda eu te agradeceria eternamente…