Pages : 1
#1 Le 22/04/2008, à 21:38
- timou
programme java
bonjour
j'ai un projet client serveur en java . ' c'est juste la class du fenetre.
j'ai un problième c'est que comment ajouter les utilisateur 'pseudo" dans la liste c-a-d à à chaque fois qu'un utilisateur se connecte son pseudo s'ajoute dans la liste à droite .
voir parite en gras.
merci.
package Chat_Client_Serveur;
import java.awt.Color;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
//Packages d'extension Java.
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class FenetreClient extends JFrame {
.
private JMenu menuServeur;
// Les JTextArea d'affichage et de saisie de messages.
private JTextArea zoneMessage;
private JTextArea zoneSaisie;
//private JTextArea zoneConnecté;
private JList zoneConnecté;
// Les JButton et JMenuItem de (d�)connexion.
private JButton boutonConnecter;
private JMenuItem elementMenuConnecter;
private JButton boutonDeconnecter;
private JMenuItem elementMenuDeconnecter;
// Le JButton d'envoi de messages.
private JButton boutonEnvoyer;
// Le JLabel d'affichage de l'�tat de connexion.
private JLabel barreDEtat;
// Le nomUtilisateur � ajouter aux messages sortants.
private String PseudoUtilisateur;
// AdministrateurMessage pour la communication avec le serveur.
private AdministrateurMessage administrateurMessage;
// MessageListener de r�ception des messages entrants.
private MessageListener messageListener;
//private SimpleAttributeSet gras;
// Constructeur de GUIClient.
public FenetreClient( AdministrateurMessage administrateur )
{
super( "CHAT Cleint/serveur" );
// Ajuster l'AdministrateurMessage.
administrateurMessage = administrateur;
// Cr�er MonMessageListener pour la r�ception des messages.
messageListener = new MonMessageListener();
// Cr�er le JMenu Serveur.
menuServeur = new JMenu ( "Soyez le bienvenu sur le chat");
menuServeur.setMnemonic( 'S' );
JMenuBar barreDeMenu = new JMenuBar();
barreDeMenu.add( menuServeur );
setJMenuBar( barreDeMenu );
// Cr�er boutonConnecter et elementMenuConnecter.
boutonConnecter = new JButton( "Connexion" );
//boutonConnecter.setBackground(Color.red);
elementMenuConnecter = new JMenuItem( "Connexion" );
// Cr�er ConnexionListener pour le bouton et le menu de connexion.
ActionListener connexionListener = new ConnexionListener();
boutonConnecter.addActionListener( connexionListener );
elementMenuConnecter.addActionListener( connexionListener );
// Cr�er boutonDeconnecter et elementMenuDeconnecter.
boutonDeconnecter = new JButton( "Déconnexion" );
elementMenuDeconnecter = new JMenuItem( "Déconnexion");
// D�sactiver le bouton et l'�l�ment de menu de d�connexion.
boutonDeconnecter.setEnabled( false );
elementMenuDeconnecter.setEnabled( false );
// Cr�er DeconnexionListener pour le bouton et le menu de d�connexion.
ActionListener deconnexionListener = new DeconnexionListener();
boutonDeconnecter.addActionListener( deconnexionListener );
elementMenuDeconnecter.addActionListener( deconnexionListener );
// Ajouter les options JMenuItems se connecter et se d�connecter
// au menuServeur.
menuServeur.add( elementMenuConnecter );
menuServeur.add( elementMenuDeconnecter );
// Ajouter les JButtons de connexion et d�connexion au panneauBoutons.
JPanel panneauBoutons = new JPanel();
panneauBoutons.add( boutonConnecter );
panneauBoutons.add( boutonDeconnecter );
// Cr�er un JTextArea pour l'affichage des messages.
zoneMessage = new JTextArea();
// D�sactiver la mise � jour et activer le retour des mots en fin de ligne.
zoneMessage.setEditable( false );
// zoneMessage.setBackground(Color.lightGray);
zoneMessage.setForeground(Color.blue);
zoneMessage.setWrapStyleWord( true );
zoneMessage.setLineWrap( true );
// D�poser zoneMessage dans un JScrollPane pour permettre le d�filement.
JPanel panneauMessage = new JPanel();
panneauMessage.setLayout( new BorderLayout( 10, 10 ) );
panneauMessage.add( new JScrollPane( zoneMessage ), BorderLayout.CENTER );
// Cr�er un JTextArea pour la saisie de messages.
zoneSaisie = new JTextArea( 4, 20 );
zoneSaisie.setBackground(Color.YELLOW);
zoneSaisie.setWrapStyleWord( true );
zoneSaisie.setLineWrap( true );
zoneSaisie.setEditable( false ); // non modifiable avant connexion.
// Cr�er le boutonEnvoyer et le d�sactiver.
boutonEnvoyer = new JButton( "Envoyer Message" );
//boutonEnvoyer.setBackground(Color.red);
boutonEnvoyer.setEnabled( false );
// Disposer zoneSaisie et boutonEnvoyer dans un BoxLayout et
// ajouter ce Box au panneauMessage.
Box boite = new Box( BoxLayout.X_AXIS );
boite.add( new JScrollPane( zoneSaisie ) );
boite.add( boutonEnvoyer );
panneauMessage.add( boite, BorderLayout.SOUTH );
[b]// Creation de la liste contenant la liste des utilisateurs.
zoneConnecté = new JList();
zoneConnecté.setPreferredSize(new Dimension(150, 300));
panneauMessage.add(zoneConnecté, BorderLayout.EAST);
zoneConnecté.setBackground(Color.cyan);[/b]
// Créer un ActionListener pour le boutonEnvoyer.
boutonEnvoyer.addActionListener( new ActionListener() {
// Envoyer nouveau message si utilisateur clique sur boutonEnvoyer.
public void actionPerformed( ActionEvent evenement )
{
administrateurMessage.envoyerMessage( PseudoUtilisateur, zoneSaisie.getText());
// Effacer la zoneSaisie.
zoneSaisie.setText( "" );
}
} // fin ActionListener
);
// Créer le JLabel de barreDEtat avec une bordure enfoncée.
barreDEtat = new JLabel( "Déconnecté" );
barreDEtat.setBorder( new BevelBorder( BevelBorder.LOWERED ) );
// Disposer les composants dans le JFrame.
Container conteneur = getContentPane();
conteneur.add( panneauBoutons, BorderLayout.NORTH );
conteneur.add( panneauMessage, BorderLayout.CENTER );
conteneur.add( barreDEtat, BorderLayout.SOUTH );
// Ajouter un WindowListener pour déconnecter si utilisateur quitte.
addWindowListener ( new WindowAdapter () {
// Se déconnecter du serveur et quitter l'application.
public void windowClosing ( WindowEvent evenement )
{
administrateurMessage.seDeconnecter( messageListener );
System.exit( 0 );
}
}
);
} // fin constructeur GUIClient
// ConnexionListener surveille les requ�tes de connexion de l'utilisateur
// au MessengerServeur.
private class ConnexionListener implements ActionListener {
// Se connecter au serveur et (d�s)activer les composants GUI.
public void actionPerformed( ActionEvent evenement )
{
// Se connecter au serveur et diriger les messages vers
// le messageListener.
administrateurMessage.seConnecter( messageListener );
// Invite de saisie du nom d'utilisateur.
PseudoUtilisateur = JOptionPane.showInputDialog(
FenetreClient.this, "Entrez votre Pseudo :" );
// Effacer la zoneMessage.
zoneMessage.setText( "" );
// Mettre à jour les composants GUI.
boutonConnecter.setEnabled( false );
elementMenuConnecter.setEnabled( false );
boutonDeconnecter.setEnabled( true );
elementMenuDeconnecter.setEnabled( true );
boutonEnvoyer.setEnabled( true );
zoneSaisie.setEditable( true );
zoneSaisie.requestFocus();
barreDEtat.setText( "Utilisateur ( " + PseudoUtilisateur + " ) connecté." );
}
} // fin de classe interne ConnexionListener
// DeconnexionListener surveille les requ�tes de d�connexion
// de l'utilisateur du DeitelMessengerServeur.
private class DeconnexionListener implements ActionListener {
// Se d�connecter du serveur et (d�s)activer les composants GUI.
public void actionPerformed( ActionEvent evenement )
{
// Se d�connecter du serveur et cesser le routage des messages
// au messageListener.
administrateurMessage.seDeconnecter( messageListener );
// Mettre � jour les composants GUI.
boutonEnvoyer.setEnabled( false );
boutonDeconnecter.setEnabled( false );
elementMenuDeconnecter.setEnabled( false );
zoneSaisie.setEditable( false );
boutonConnecter.setEnabled( true );
elementMenuConnecter.setEnabled( true );
barreDEtat.setText( "Déconnecté" );
}
} // fin classe interne DeconnexionListener
// MonMessageListener surveille l'arriv�e de messages en provenance de
// l'AdministrateurMessage et affiche les messages dans zoneMessage
// � l'aide d'un AfficheurMessage.
private class MonMessageListener implements MessageListener {
// � la r�ception, afficher les nouveaux messages dans zoneMessage.
public void messageRecu( String venantDe, String message )
{
// Ajouter le message � l'aide d'un AfficheurMessage et invokeLater,
// garantissant un acc�s prot�g� par thread � zoneMessage.
SwingUtilities.invokeLater(
new AfficheurMessage( venantDe, message ) );
} // fin m�thode messageRecu
} // fin classe interne MonMessageListener
// AfficheurMessage affiche un nouveau message en ajoutant le message
// � la suite du JTextArea zoneMessage. Cet objet runnable
// doit s'ex�cuter seulement dans le thread de distribution d'�v�nements
// parce qu'il modifie un composant de Swing actif.
private class AfficheurMessage implements Runnable {
private String venantDeLUtilisateur;
private String corpsMessage;
// Constructeur d'AfficheurMessage.
public AfficheurMessage( String venantDe, String corps )
{
venantDeLUtilisateur = venantDe;
corpsMessage = corps;
}
public void run()
{
zoneMessage.append( "\n" + venantDeLUtilisateur + " >>> " + corpsMessage );
zoneMessage.setCaretPosition(
zoneMessage.getText().length() );
}
}
Merci d'utiliser les balises code...
Dernière modification par slasher-fun (Le 22/04/2008, à 21:42)
Hors ligne
#2 Le 22/04/2008, à 23:44
- mutah
Re : programme java
Il faut un thread qui va demander la liste des utilisateurs au serveur régulièrement, et qui vide puis remplit le composant graphique si celle-ci est différente de la présente.
C'est pas les clients IRC java qui manquent pour s'inspirer :
http://www.google.fr/search?q=irc+java+client
Ce n'est pas le chemin qui est difficile, c'est le difficile qui est chemin.
Hors ligne
#3 Le 04/05/2008, à 20:28
- timou
Re : programme java
je ne trouve pas la solution comment s'ajoute le pseudo d'un utilisateur après sa connection et le supprimer après sa déconnexion .
Hors ligne
#4 Le 04/05/2008, à 23:45
- mutah
Re : programme java
ça dépend du protocole réseau : si le serveur diffuse les événements aux clients, (comme l'événement "un utilisateur est entré", "un utilisateur est sorti"), ou que les clients viennent se renseigner périodiquement auprès du serveur pour connaître l'état. ça va plus loin que ton code d'interface graphique.
Sinon, pour apprendre à utiliser une JList, c'est là : http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
Ce n'est pas le chemin qui est difficile, c'est le difficile qui est chemin.
Hors ligne
Pages : 1