最後我延長了系統的外觀和感覺是這樣的:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
UIManager.put("ButtonUI", "com.my.package.MyButtonUI");
UIManager.put("Panel.background", Color.green);
隨着MyButtonUI
:
public class MyButtonUI extends BasicButtonUI {
public static final int BUTTON_HEIGHT = 24;
private static final MyButtonUI INSTANCE = new MyButtonUI();
public static ComponentUI createUI(JComponent b) {
return INSTANCE;
}
@Override
public void paint(Graphics g, JComponent c) {
AbstractButton button = (AbstractButton) c;
Graphics2D g2d = (Graphics2D) g;
final int buttonWidth = button.getWidth();
if (button.getModel().isRollover()) {
// Rollover
GradientPaint gp = new GradientPaint(0, 0, Color.green, 0, BUTTON_HEIGHT * 0.6f, Color.red, true);
g2d.setPaint(gp);
} else if (button.isEnabled()) {
// Enabled
GradientPaint gp = new GradientPaint(0, 0, Color.red, 0, BUTTON_HEIGHT * 0.6f, Color.gray, true);
g2d.setPaint(gp);
} else {
// Disabled
GradientPaint gp = new GradientPaint(0, 0, Color.black, 0, BUTTON_HEIGHT * 0.6f, Color.blue, true);
g2d.setPaint(gp);
}
g2d.fillRect(0, 0, buttonWidth, BUTTON_HEIGHT);
super.paint(g, button);
}
@Override
public void update(Graphics g, JComponent c) {
AbstractButton button = (AbstractButton) c;
if (isInToolBar(button)) {
// Toolbar button
button.setOpaque(false);
super.paint(g, button);
} else if (button.isOpaque()) {
// Other opaque button
button.setRolloverEnabled(true);
button.setForeground(Color.white);
paint(g, button);
} else {
// Other non-opaque button
super.paint(g, button);
}
}
private boolean isInToolBar(AbstractButton button) {
return SwingUtilities.getAncestorOfClass(JToolBar.class, button) != null;
}
}
注:我higly推薦此鏈接:http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/(羅賓)
謝謝。
另請參閱[UIManager默認值](http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/) – Robin
被引[此](http://stackoverflow.com/a/3705571/230513 )。請嘗試着重您的非常廣泛的問題;一個[sscce](http://sscce.org/)會很有幫助。 – trashgod
謝謝你的指點。我會在幾個小時內看一看。對不起,但沒有SSCCE提供。我的問題是一般性的,因爲我真的不知道這樣做。 –