Probleme d'affichage en java
Bernard
-
Utilisateur anonyme -
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.
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
-
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