这是我很久以前在网上发现的一些简单代码.我真的不喜欢那是使用插入符听众.您应该使用DocumentListener或DocumentFilter.但它会让您了解如何使用自定义图标来表示笑脸.
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class Smiley
extends JFrame {
//autoreplacing :) with picture
JTextPane p = new JTextPane();
public Smiley() throws Exception {
p.setEditorKit(new StyledEditorKit());
getContentPane().add(p, BorderLayout.CENTER);
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setIcon(attrs, getImage());
p.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
StyledDocument doc = (StyledDocument) p.getDocument();
String text = doc.getText(0, p.getDocument().getLength());
int index = text.indexOf(":)");
int start = 0;
while (index > -1) {
Element el = doc.getCharacterElement(index);
if (StyleConstants.getIcon(el.getAttributes()) == null) {
doc.remove(index, 2);
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setIcon(attrs, getImage());
doc.insertString(index, ":)", attrs);
}
start = index + 2;
index = text.indexOf(":)", start);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
});
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 400);
}
public static void main(String[] args) throws Exception {
Smiley test11 = new Smiley();
test11.show();
}
protected ImageIcon getImage() {
BufferedImage bi = new BufferedImage(15, 15, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.setColor(Color.red);
g.drawOval(0, 0, 14, 14);
g.drawLine(4, 9, 9, 9);
g.drawOval(4, 4, 1, 1);
g.drawOval(10, 4, 1, 1);
return new ImageIcon(bi);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8258 次 |
| 最近记录: |