想必每个数据对象都会有些必填项, 因此做了一个标签提示哪个是必填项.
这个也是重写UI的, 不过和M2那个Label一样, 因为Label是透明的, 应该可以应用于各种L&F.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalLabelUI;
import com.sun.java.swing.SwingUtilities2;

/** *//**
* Created at 2006-8-7 9:46:32<br>
* 必填项标签
*
* @author Brad.Wu
* @version 1.0
*/
@SuppressWarnings("serial")

public class RequiredLabel extends JLabel ...{

public RequiredLabel() ...{
}

public RequiredLabel(String text) ...{
super("* " + text);
}

/** *//**
* (非 Javadoc)
*
* @see javax.swing.JLabel#setText(java.lang.String)
*/
@Override

public void setText(String text) ...{
if (text.startsWith("* "))
super.setText(text);
else
super.setText("* " + text);
}

/** *//**
* (非 Javadoc)
*
* @see javax.swing.JLabel#updateUI()
*/
@Override

public void updateUI() ...{
setUI(new RequiredLabelUI());
}

/** *//**
* Created at 2006-8-7 9:53:32<br>
* 必填项标签UI
*
* @author Brad.Wu
* @version 1.0
*/

static class RequiredLabelUI extends MetalLabelUI ...{
protected static RequiredLabelUI labelUI = new RequiredLabelUI();

public static ComponentUI createUI(JComponent c) ...{
return labelUI;
}

/** *//**
* (非 Javadoc)
*
* @see javax.swing.plaf.basic.BasicLabelUI#paintEnabledText(javax.swing.JLabel,
* java.awt.Graphics, java.lang.String, int, int)
*/
@Override

protected void paintEnabledText(JLabel l, Graphics g, String s, int textX, int textY) ...{
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(l.getForeground());
int x = l.getFontMetrics(l.getFont()).stringWidth("*");
SwingUtilities2.drawStringUnderlineCharAt(l, g, s.substring(1), mnemIndex, textX + x,
textY);
g.setColor(new Color(255, 100, 100));
SwingUtilities2.drawString(l, g, "*", textX, textY + 2);
}
}
}
