Emoticon + application Chat

Neriade Messages postés 1 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 4 janvier 2003 - 4 janv. 2003 à 02:01
simal00 Messages postés 7 Date d'inscription vendredi 11 février 2011 Statut Membre Dernière intervention 12 février 2011 - 29 mai 2011 à 18:53
Bonjour,

j'ai besoin d'aide avec une application chat que je dois créer.

Sur mon application, j'essaie d'ajouter des boutons/Icons qui retourne un gif dans mon JTextField mais je ne connais aucun moyen me permettant de la faire.

Est-ce qu'il y a quelqu'un qui sait comment faire?

Merci,
Isabelle

P.S. voici mon code:

Hi,

I'm building a chat application and I want to add emoticons. I tried to
do so using JButton (IconImage image) but I don't know how to send the
image.gif to my JTextField and to my JTextArea.

Does anybody can help me out??

Thanks
Isabelle

Here is my code so far...(the comments are in french)

//Developpement d'une application CHAT

//package chatv2.a

import java.lang.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;

public class TCPChat2a implements Runnable {

// Constantes de l'etat de la connection
public final static int NULL = 0;
public final static int DISCONNECTED = 1;
public final static int DISCONNECTING = 2;
public final static int BEGIN_CONNECT = 3;
public final static int CONNECTED = 4;

// Declaration d'un tableau de chaines
public final static String statusMessages[] = {
" Erreur! Aucune connexion possible!", " Deconnexion",
" Deconnexion en cours...", " Connexion en cours...", " Connexion"
};

//Instentiation de la classe
public final static TCPChat2a tcpObj = new TCPChat2a();

// Indique la fin d'une session
public final static String END_CHAT_SESSION =
new Character((char)0).toString();

// Informations sur l'etat de la connexion
public static String hostIP = "localhost";
public static String user = "";
public static String s1;

public static int port = 1234;
public static int connectionStatus = DISCONNECTED;
public static boolean isHost = true;
public static String statusString = statusMessages[connectionStatus];
public static StringBuffer toAppend = new StringBuffer("");
public static StringBuffer toSend = new StringBuffer("");

// Declaration des composantes GUI et initialisation
public final static ImageIcon sourrire = new ImageIcon
("icons/sourrire.gif");
public static JButton b1;
public final static ImageIcon gsourrire = new ImageIcon
("icons/grand_sourrire.gif");
public static JButton b2;
public final static ImageIcon triste = new ImageIcon
("icons/triste.gif");
public static JButton b3;
public final static ImageIcon pleure = new ImageIcon
("icons/pleure.gif");
public static JButton b4;
public final static ImageIcon coeur = new ImageIcon ("icons/coeur.gif");
public static JButton b5;
public final static ImageIcon grimace = new ImageIcon
("icons/grimace.gif");
public static JButton b6;
public final static ImageIcon lunettes = new ImageIcon
("icons/lunettes.gif");
public static JButton b7;
public final static ImageIcon fache = new ImageIcon ("icons/fache.gif");
public static JButton b8;
public final static ImageIcon bec = new ImageIcon ("icons/bec.gif");
public static JButton b9;
public final static ImageIcon clinoeil = new ImageIcon
("icons/clinoeil.gif");
public static JButton b10;
public static JFrame mainFrame = null;
public static JTextArea chatText = null;
public static JTextField chatLine = null;
public static JPanel statusBar = null;
public static JLabel statusField = null;
public static JTextField statusColor = null;
public static JTextField ipField = null;
public static JTextField username = null;
public static JTextField portField = null;
public static JRadioButton hostOption = null;
public static JRadioButton guestOption = null;
public static JButton connectButton = null;
public static JButton disconnectButton = null;

// Declaration des composantes TCP
public static ServerSocket hostServer = null;
public static Socket socket = null;
public static BufferedReader in = null;
public static PrintWriter out = null;

////////////////////////////////////////////////////////////////////////
//Methode qui retourne le premier pannel(optionsPane),ce dernier
//se compose de 5 panneaux
private static JPanel initOptionsPane() {

//pannel pane qui sera ajouté au pannel optionsPane
JPanel pane = null;

//initiation de la classe ActionAdapteur qui implemente ActionListner
ActionAdapter buttonListener = null;

// Creation du pannel optionsPane
JPanel optionsPane = new JPanel(new GridLayout(5, 1));

// 1er pannel pane pour label et textfield de l'adresse IP
pane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
pane.add(new JLabel("Serveur IP:"));
ipField = new JTextField(10);
ipField.setBackground(new Color(0.98f, 0.97f, 0.85f));
ipField.setText(hostIP);
ipField.setEnabled(false);

//evenement generer par Component avec la methode addFocusListener
//en cas d'obtention ou perte du focus par un composant
ipField.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
ipField.selectAll();
//Editable seulement en mode deconnexion
if (connectionStatus != DISCONNECTED) {
changeStatusNTS(NULL, true);
}
else {
hostIP = ipField.getText();
}
}
});
pane.add(ipField);
optionsPane.add(pane);

// 2eme pannel pane pour label et textfield du port
pane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
pane.add(new JLabel("Port:"));
portField = new JTextField(10);
portField.setBackground(new Color(0.98f, 0.97f, 0.85f));
portField.setEditable(true);
portField.setText((new Integer(port)).toString());

portField.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {

//Textfield du port modifiable si on est en mode deconnexion
if (connectionStatus != DISCONNECTED) {
changeStatusNTS(NULL, true);
}
else {
int temp;
try {
temp = Integer.parseInt(portField.getText());
port = temp;
}
catch (NumberFormatException nfe) {
portField.setText((new Integer(port)).toString());
mainFrame.repaint();
}
}
}
});
pane.add(portField);
optionsPane.add(pane);

// 3eme pannel pour label et textfield du nom d'utilisateur
pane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
pane.add(new JLabel("Nom: "));
username = new JTextField(10);
username.setBackground(new Color(0.98f, 0.97f, 0.85f));
username.setText(user);
username.setEnabled(true);
username.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
// username.selectAll();
// Should be editable only when disconnected
if (connectionStatus != DISCONNECTED) {
changeStatusNTS(NULL, true);
}
else {
user = username.getText();

}
}
});
pane.add(username);
optionsPane.add(pane);

// Host/guest option
buttonListener = new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
if (connectionStatus != DISCONNECTED) {
changeStatusNTS(NULL, true);
}
else {
isHost = e.getActionCommand().equals("host");

// Cannot supply host IP if host option is chosen
if (isHost) {
ipField.setEnabled(false);
ipField.setText("localhost");
hostIP = "localhost";
}
else {
ipField.setEnabled(true);
}
}
}
};
//creation de boutton groupe radio(serveur et invite)
ButtonGroup bg = new ButtonGroup();
hostOption = new JRadioButton("Serveur", true);
hostOption.setMnemonic(KeyEvent.VK_S);
hostOption.setActionCommand("host");
hostOption.addActionListener(buttonListener);
guestOption = new JRadioButton("Invite", false);
guestOption.setMnemonic(KeyEvent.VK_I);
guestOption.setActionCommand("invite");
guestOption.addActionListener(buttonListener);
bg.add(hostOption);
bg.add(guestOption);

// 4eme pannel pane pour les 2 bouttons radio
pane = new JPanel(new GridLayout(1, 2));
pane.add(hostOption);
pane.add(guestOption);
optionsPane.add(pane);

// 5eme pannel buttonPane pour les bouttons de connexion et
deconnexion
JPanel buttonPane = new JPanel(new GridLayout(1, 2));
buttonListener = new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
// requete pou debut d'une connexion
if (e.getActionCommand().equals("connect")) {
changeStatusNTS(BEGIN_CONNECT, true);
}
// Deconnexion
else {
changeStatusNTS(DISCONNECTING, true);
}
}
};
//creation des bouttons dans le pannel et l'ajout au premier pannel
//(optionsPane)
connectButton = new JButton("Connexion");
connectButton.setMnemonic(KeyEvent.VK_C);
connectButton.setActionCommand("connect");
connectButton.addActionListener(buttonListener);
connectButton.setEnabled(true);
disconnectButton = new JButton("Deconnexion");
disconnectButton.setMnemonic(KeyEvent.VK_D);
disconnectButton.setActionCommand("disconnect");
disconnectButton.addActionListener(buttonListener);
disconnectButton.setEnabled(false);
buttonPane.add(connectButton);
buttonPane.add(disconnectButton);
optionsPane.add(buttonPane);
return optionsPane;
}

/////////////////////////////////////////////////////////////////

// Initialisation de toutes les composantes GUI et affichage du frame
private static void initGUI() {
// Configuration du status bar
// création d'un autre pannel statusBar qui se compose d'un petit
carré
// coloré et un label indiquant le mode de connexion
statusField = new JLabel(); //Label indiquant l'état de la connexion
statusField.setText(statusMessages[DISCONNECTED]);
statusColor = new JTextField(1); //carré coloré indiquant l'état de la
connection grace a des couleurs
statusColor.setBackground(Color.red);
statusColor.setEditable(false);
statusBar = new JPanel(new BorderLayout());
statusBar.add(statusColor, BorderLayout.WEST);
statusBar.add(statusField, BorderLayout.CENTER);

// Configuration du pannel optionsPane en appelant la methode
d'initiation
// de ce dernier
JPanel optionsPane = initOptionsPane();

// Creation et configuration du pannel chatPane qui contient un
// textarea au centre avec une barre defilante verticale et un
textfield
// au sud pour faire rentrer les messages
JPanel chatPane = new JPanel(new BorderLayout());
JPanel emoticon = new JPanel(new GridLayout(2, 5));
b1 = new JButton (sourrire);
b1.setToolTipText("Un Sourire");
// b1.addActionListener();
emoticon.add(b1);
b2 = new JButton (gsourrire);
b2.setToolTipText("Un Grand Sourire");
// b2.addActionListener();
emoticon.add(b2);
b3 = new JButton (triste);
b3.setToolTipText("Triste");
// b3.addActionListener();
emoticon.add(b3);
b4 = new JButton (grimace);
b4.setToolTipText("Grimace");
// b4.addActionListener();
emoticon.add(b4);
b5 = new JButton (pleure);
b5.setToolTipText("Pleure");
// b5.addActionListener();
emoticon.add(b5);
b6 = new JButton (bec);
b6.setToolTipText("Un bec");
// b6.addActionListener();
emoticon.add(b6);
b7 = new JButton (coeur);
b7.setToolTipText("Un coeur pour toi");
// b7.addActionListener();
emoticon.add(b7);
b8 = new JButton (fache);
b8.setToolTipText("Fache");
// b8.addActionListener();
emoticon.add(b8);
b9 = new JButton (lunettes);
b9.setToolTipText("Je suis Cool");
// b9.addActionListener();
emoticon.add(b9);
b10 = new JButton (clinoeil);
b10.setToolTipText("Clin d'Oeil");
//b10.addActionListener(new ActionAdapter2());
emoticon.add(b10);
emoticon.addActionListener(new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
String image = chatLine.setImage().toString();
appendToChatBox(image);
chatLine.selectAll();
sendString(image)
chatLine.setText(" ");

}
});
emoticon.setVisible(true);

//b1 = setVisible(true);
chatText = new JTextArea(10, 100);
chatText.setBackground(new Color(0.98f, 0.97f, 0.85f));
chatText.setLineWrap(true);
chatText.setEditable(false);
chatText.setForeground(Color.blue);
JScrollPane chatTextPane = new JScrollPane(chatText,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
chatLine = new JTextField(10);
chatLine.setBackground(new Color(0.98f, 0.97f, 0.85f));
chatLine.setForeground(Color.blue);
chatLine.setEnabled(false);
chatLine.addActionListener(new ActionAdapter() {
public void actionPerformed(ActionEvent e) {
String s = chatLine.getText();
if (!s.equals("")) {

appendToChatBox(user=username.getText()+" dit : \n" + s +
"\n");
chatLine.selectAll();

// Envoi de la chaine entrée
sendString(s);
chatLine.setText("");
}
}
});
chatPane.add(chatLine, BorderLayout.SOUTH);
chatPane.add(chatTextPane, BorderLayout.NORTH);
chatPane.setPreferredSize(new Dimension(300, 300));
chatPane.add(emoticon, BorderLayout.CENTER);

// Ajout des pannels dans le pannel principal (mainPane)
JPanel mainPane = new JPanel(new BorderLayout());
mainPane.add(statusBar, BorderLayout.SOUTH);
mainPane.add(optionsPane, BorderLayout.WEST);
mainPane.add(chatPane, BorderLayout.CENTER);

// Configuration du frame (mainFrame)
mainFrame = new JFrame("Chat");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// la méthode setDefaultCloseOperation(int)provient de la classe
javax.swing.JDialog
// Elle specifi l'opération qui sera exécutée par défault lorsque
// l'utilisateur initialisera une fermeture de session
mainFrame.setContentPane(mainPane);
mainFrame.setSize(mainFrame.getPreferredSize());
// la méthode getPreferredSize() provient de la classe java.awt
// Retourne la grosseur "préférée" du container.
mainFrame.setLocation(200, 200);
// la méthode setLocation(double, double) provient de la classe
java.awt.Point
// elle permet de specifiez un emplacement d'un point a des coordonnées
de type Float
mainFrame.pack();
// la méthode pack() provient de la class AWT.Window, elle permet a la
fenetre
// d'être ajuster a la grosseur et a la mise en page des
sous-composantes de celle-ci
mainFrame.setVisible(true);
}

/////////////////////////////////////////////////////////////////

// Le thread qui permet le changement des composantes GUI pendant le
// changement de l'etat
private static void changeStatusTS(int newConnectStatus, boolean noError)
{
// Changer l'etat si valide
if (newConnectStatus != NULL) {
connectionStatus = newConnectStatus;
}

// S'il n'y a aucunes erreur, afficher le bon message de l'etat
if (noError) {
statusString = statusMessages[connectionStatus];

}
// Autrement, afficher le message d'erreur
else {
statusString = statusMessages[NULL];
System.out.println("Echec lors de la connexion");
}

// Appel a la routine de run()(Runnable interface) sur la gestion des
erreurs
// et la mise a jours des composantes GUI grace au thread
SwingUtilities.invokeLater(tcpObj);
}

/////////////////////////////////////////////////////////////////

// Le changement des composantes GUI sans aucun pendant le
// changement de l'etat
private static void changeStatusNTS(int newConnectStatus, boolean
noError) {
// Changer l'etat si valide
if (newConnectStatus != NULL) {
connectionStatus = newConnectStatus;
}

// S'il n'y a aucunes erreur, afficher le bon message de l'etat
if (noError) {
statusString = statusMessages[connectionStatus];
}
// Autrement, afficher le message d'erreur
else {
statusString = statusMessages[NULL];
}

// Appel a la routine de run()(Runnable interface) sur la gestion des
erreurs
// en utilisant le thread
tcpObj.run();
}

/////////////////////////////////////////////////////////////////

// L'ajout au chat box avec l'utilisation du Thread
private static void appendToChatBox(String s) {
synchronized (toAppend) {
toAppend.append(s);
System.out.println(s);
}
}

/////////////////////////////////////////////////////////////////

// Ajouter le text au "send-buffer"
private static void sendString(String s) {
synchronized (toSend) {
toSend.append(user=username.getText()+ " dit : \n" + s + "\n");
}
}

/////////////////////////////////////////////////////////////////

// Nettoyage pour le debranchement
private static void cleanUp() {
try {
if (hostServer != null) {
hostServer.close();
hostServer = null;
}
}
catch (IOException e) { hostServer = null; }

try {
if (socket != null) {
socket.close();
socket = null;
}
}
catch (IOException e) { socket = null; }

try {
if (in != null) {
in.close();
in = null;
}
}
catch (IOException e) { in = null; }

if (out != null) {
out.close();
out = null;
}
}

/////////////////////////////////////////////////////////////////

// Verification de l'etat courrant et ajustement de "enable/disable"
// en fonction de l'etat
public void run() {
switch (connectionStatus) {
case DISCONNECTED:
connectButton.setEnabled(true);
disconnectButton.setEnabled(false);
ipField.setEnabled(true);
portField.setEnabled(true);
username.setEnabled(true);
hostOption.setEnabled(true);
guestOption.setEnabled(true);
chatLine.setText("");
chatLine.setEnabled(false);
statusColor.setBackground(Color.red);
break;

case DISCONNECTING:
connectButton.setEnabled(false);
disconnectButton.setEnabled(false);
ipField.setEnabled(false);
portField.setEnabled(false);
hostOption.setEnabled(false);
guestOption.setEnabled(false);
chatLine.setEnabled(false);
statusColor.setBackground(Color.orange);
break;

case CONNECTED:
connectButton.setEnabled(false);
disconnectButton.setEnabled(true);
ipField.setEnabled(false);
portField.setEnabled(false);
hostOption.setEnabled(false);
username.setEnabled(false);
guestOption.setEnabled(false);
chatLine.setEnabled(true);
statusColor.setBackground(Color.green);

break;

case BEGIN_CONNECT:
connectButton.setEnabled(false);
disconnectButton.setEnabled(false);
ipField.setEnabled(false);
portField.setEnabled(false);
hostOption.setEnabled(false);
username.setEnabled(false);
guestOption.setEnabled(false);
chatLine.setEnabled(true);
chatLine.grabFocus();
statusColor.setBackground(Color.orange);
break;
}

// S'assurer que l'etat des champs bouton/texte sont consistent
// avec l'etat interne
ipField.setText(hostIP);
portField.setText((new Integer(port)).toString());
hostOption.setSelected(isHost);
guestOption.setSelected(!isHost);
statusField.setText(statusString);
chatText.append(toAppend.toString());
toAppend.setLength(0);

mainFrame.repaint();
}

/////////////////////////////////////////////////////////////////

// Procedure principale
public static void main(String args[]) {
String s;
initGUI();

while (true) {
try {
Thread.sleep(10);
// Verification a toute les 10 ms
}
catch (InterruptedException e) {}

switch (connectionStatus) {
case BEGIN_CONNECT:
try {
// Essai de configuration du serveur si "host"
if(user != ""){
if (isHost) {
hostServer = new ServerSocket(port);
socket = hostServer.accept();
}

// Si invité, essai de branchement au serveur
else {
socket = new Socket(hostIP, port);
}

in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
changeStatusTS(CONNECTED, true);
System.out.println("Ouverture de la session: \n" + socket);
}

else{
JOptionPane.showMessageDialog(null, "Erreur, vous devez entrer un
nom d'utilisateur", "Erreur", JOptionPane.PLAIN_MESSAGE);
changeStatusTS(DISCONNECTED, false);
}
}
// Si erreur, nettoyage et envoi du message d'erreur
catch (IOException e) {
cleanUp();
changeStatusTS(DISCONNECTED, false);
}
break;

case CONNECTED:
try {
// Envoi de data
if (toSend.length() != 0) {
out.print(toSend);
out.flush();
toSend.setLength(0);
changeStatusTS(NULL, true);
}

// Reception de data
if (in.ready()) {
s = in.readLine();
if ((s != null) && (s.length() != 0)) {
// Verification de la fin de la transmission
if (s.equals(END_CHAT_SESSION)) {
changeStatusTS(DISCONNECTING, true);
}

// Autrement, reception du texte
else {
appendToChatBox( s + "\n");
changeStatusTS(NULL, true);
}
}
}
}
catch (IOException e) {
cleanUp();
changeStatusTS(DISCONNECTED, false);
}
break;

case DISCONNECTING:
// Dis aux autres fenetre de chat de se débrancher aussi
out.print(END_CHAT_SESSION);
out.flush();
System.out.println("Fermeture de la session");
// Nettoyage (ferme les streams/sockets)
cleanUp();
changeStatusTS(DISCONNECTED, true);
break;

default: break; // ne fait rien
}
}
}
}

////////////////////////////////////////////////////////////////////

// Certaines interfaces écouteurs sont accompagnées d'adaptateurs qui
//implementent toutes les methodes de l'interface et evitent de les lister.

class ActionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {}
}

////////////////////////////////////////////////////////////////////

6 réponses

cs_era Messages postés 77 Date d'inscription lundi 6 mai 2002 Statut Membre Dernière intervention 4 mai 2011
22 mai 2003 à 12:15
tu fais insertIcon(icon) dans ton objet JTextPane tout simplement, ca affiche des jpeg, gif et autre mais pas des .ico

si tu sais faire pour les .ico je prends

Y a pas que $crosoft dans la vie......
Ebouda ^-[( ° ° )]-^
0
emubusta Messages postés 27 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 21 mai 2008
13 janv. 2005 à 22:28
slt g aussi le meme pb et g fait comme ta dit mais cela ne marche tjrs pas
a+
0
emubusta Messages postés 27 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 21 mai 2008
13 janv. 2005 à 22:30
Salut g le meme pb ke toi et g essayé mais cela ne marche tjrs si ta reçu pourrait tu me passer ton code????
a+
0
emubusta Messages postés 27 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 21 mai 2008
13 janv. 2005 à 22:33
salut g le meme pb ke toi et je n'ai pas reussi avec insertIcon si ta reussi pourrai tu me passer ton code stp
a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
simal00 Messages postés 7 Date d'inscription vendredi 11 février 2011 Statut Membre Dernière intervention 12 février 2011
29 mai 2011 à 18:43
j'ai pas compris ou tu a mi tes emoticones je veux mettre aussi des emoticones dans mon application de messagerie instantanè mais j'ai pas compris ce que tu as fè si vous pouvez m aidè svpppp
0
simal00 Messages postés 7 Date d'inscription vendredi 11 février 2011 Statut Membre Dernière intervention 12 février 2011
29 mai 2011 à 18:53
et c'est quoi l'adress du serveur ,moi je travail avec le protocol jabber c'est pour sa je suis perdu la
0
Rejoignez-nous