Probleme d'affichage en java

Bernard -  
 Utilisateur anonyme -
Bonjour,
Quelqu'un sait comment afficher une icone dans un JTextArea ou Pane ? C'est pour un chat, quand on poste un nouveau message, il faut que l'icone(smiley) reste quand le texte monte. Merci.

1 réponse

  1. Utilisateur anonyme
     
    Salut Bernard!

    Jem suis penché sur ton problème et je suis arrivé à la solution ci-dessous.

    J'ai créé 3 classes:
    - JIconableTextArea qui permet de dessiner des ImageIcon sur un TextArea
    - ChatMessage qui est une structure de données permettant de stocker une icône, un nickname et un message
    - Tester qui est juste une classe éténdant JFrame qui permet de tester l'application

    Tu trouveras le code des ces classes ci-dessous.
    A toi de l'adapter afin que cela réponde exactement à ce que tu attends.

    package temp;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;

    /**
    *
    *@author HackTrack
    *@created July 24, 2003
    *@version 1.0
    */

    public class JIconableTextArea extends JTextArea {
    private ArrayList chatData;

    public JIconableTextArea() {
    super();
    initialize();
    }

    public JIconableTextArea(int rows, int cols) {
    super(rows, cols);
    initialize();
    }

    public void addMessage(ChatMessage chatMessage) {
    chatData.add(chatMessage);
    }

    public void paint(Graphics g) {
    g.clearRect(0, 0, this.getWidth(), this.getHeight());
    Iterator it = chatData.iterator();
    ImageIcon icon;
    String nickname;
    String message;
    for(int i = 0; i < chatData.size(); i++) {
    ChatMessage chatMessage = (ChatMessage)chatData.get(i);
    icon = chatMessage.getIcon();
    nickname = chatMessage.getNickname();
    message = chatMessage.getMessage();
    int w = icon.getIconWidth();
    int h = icon.getIconHeight();
    icon.paintIcon(this, g, 0, h * i);
    g.drawString(nickname + " dit: " + message, w + 10, h * i + h / 2 + getFont().getSize() / 2);
    }
    }

    private void initialize() {
    chatData = new ArrayList();
    chatData.add(new ChatMessage(new ImageIcon("D:/test.jpg"), "Jean", "Salut! Comment vas-tu?"));
    chatData.add(new ChatMessage(new ImageIcon("D:/test2.jpg"), "Anne", "Bien merci et toi?"));
    chatData.add(new ChatMessage(new ImageIcon("D:/test.jpg"), "Jean", "Un peu fatigué!"));
    }
    }

    package temp;
    import javax.swing.ImageIcon;
    /**
    *
    *@author HackTrack
    *@created July 24, 2003
    *@version 1.0
    */

    public class ChatMessage {
    private ImageIcon icon;
    private String nickname;
    private String message;

    public ChatMessage(ImageIcon icon, String nickname, String message) {
    this.icon = icon;
    this.nickname = nickname;
    this.message = message;
    }

    public ImageIcon getIcon() {
    return icon;
    }

    public String getNickname() {
    return nickname;
    }

    public String getMessage() {
    return message;
    }
    }

    package temp;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    /**
    *
    *@author HackTrack
    *@created July 22, 2003
    *@version 1.0
    */

    public class Tester extends JFrame {
    private Container c;
    private JIconableTextArea textarea;

    public Tester() {
    initialize();
    }

    private void initialize() {
    c = getContentPane();
    textarea = new JIconableTextArea(15, 20);
    JScrollPane jsp = new JScrollPane(textarea);
    jsp.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
    public void adjustmentValueChanged(AdjustmentEvent e) {
    textarea.repaint();
    }
    });
    c.add(jsp);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    }

    public static void main(String[] args) {
    Tester tester = new Tester();
    }
    }

    ;-)
    HackTrack
    0