Swing只支持很简单的HTML代码
自己写的一个简单的例子:import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;import javax.swing.*;public class MovingTextIcon
implements Icon, Runnable
{
private JLabel renderer = new JLabel();
private int width;
private int height;

private int curPos = 180;
private Component component = null; 
private Thread thread = null; public MovingTextIcon(String text, int width, int height)
{
this.renderer.setText(text);
this.renderer.setSize(this.renderer.getPreferredSize());
this.width = width;
this.height = height;
} public void paintIcon(Component c, Graphics g, int x, int y)
{
this.component = c; g = g.create();
g.setClip(x, y, width, height);
g.translate(x + curPos, y + (height - renderer.getHeight())/2);

renderer.paint(g);
if (curPos + renderer.getWidth() > width) {
g.translate(-width, 0);
}
renderer.paint(g); g.dispose();
if (thread == null || !thread.isAlive()) {
thread = new Thread(this);
thread.start();
}
} public int getIconWidth()
{
return width;
} public int getIconHeight()
{
return height;
} public void run()
{
while (true) {
try {
Thread.sleep(40);
} catch (InterruptedException e) {
}
if (!component.isVisible() || !component.isDisplayable()) {
break;
}
curPos += 3;
if (curPos >= width) {
curPos = 0;
}
// curPos -= 3;
// if (curPos <= 0) {
// curPos = width;
// }
component.repaint();
}
} public static void main(String[] args)
{
JPanel p = new JPanel();
JLabel l = new JLabel();
JButton btn = new JButton("Test");
l.setIcon(new MovingTextIcon("Hello World!", 200, 50));
l.setBorder(BorderFactory.createLineBorder(Color.gray));
btn.setIcon(new MovingTextIcon("Hello World!", 100, 30));
p.add(l);
p.add(btn); JFrame f = new JFrame();
f.getContentPane().add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}