我有一个Swing应用程序,其中包含一个主窗体和一些其他加载在其内的表单。我需要实现一个通用方法来设置任何表单上所有按钮的手形光标。
这类似于我们在Web页面上使用CSS所做的操作(input[type=button] { cursor:pointer; }
)
我有一个Swing应用程序,其中包含一个主窗体和一些其他加载在其内的表单。我需要实现一个通用方法来设置任何表单上所有按钮的手形光标。
这类似于我们在Web页面上使用CSS所做的操作(input[type=button] { cursor:pointer; }
)
public class ButtonCursorAddon extends AbstractComponentAddon {
/**
* @param name
*/
protected ButtonCursorAddon() {
super("RolloverCursor");
}
@Override
protected void addBasicDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
UIManager.getDefaults().remove("ButtonUI");
defaults.add("ButtonUI", "org.jdesktop.swingx.plaf.ButtonCursorAddon$BasicButtonCursorUI");
}
@Override
protected void addMetalDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
UIManager.getDefaults().remove("ButtonUI");
defaults.add("ButtonUI", "org.jdesktop.swingx.plaf.ButtonCursorAddon$MetalButtonCursorUI");
}
@Override
protected void addWindowsDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
UIManager.getDefaults().remove("ButtonUI");
defaults.add("ButtonUI", "org.jdesktop.swingx.plaf.ButtonCursorAddon$WindowsButtonCursorUI");
}
@Override
protected void addNimbusDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
UIManager.getDefaults().remove("ButtonUI");
defaults.add("ButtonUI", "org.jdesktop.swingx.plaf.ButtonCursorAddon$SynthButtonCursorUI");
}
public static class BasicButtonCursorUI extends BasicButtonUI {
public static ComponentUI createUI(JComponent c) {
return new BasicButtonCursorUI();
}
@Override
protected BasicButtonListener createButtonListener(AbstractButton b) {
return new BasicHyperlinkListener(b);
}
}
public static class SynthButtonCursorUI extends SynthButtonUI {
public static ComponentUI createUI(JComponent c) {
return new SynthButtonCursorUI();
}
@Override
protected BasicButtonListener createButtonListener(AbstractButton b) {
return new BasicHyperlinkListener(b);
}
}
public static class MetalButtonCursorUI extends MetalButtonUI {
public static ComponentUI createUI(JComponent c) {
return new MetalButtonCursorUI();
}
@Override
protected BasicButtonListener createButtonListener(AbstractButton b) {
return new BasicHyperlinkListener(b);
}
}
public static class WindowsButtonCursorUI extends WindowsButtonUI {
public static ComponentUI createUI(JComponent c) {
return new WindowsButtonCursorUI();
}
@Override
protected BasicButtonListener createButtonListener(AbstractButton b) {
return new BasicHyperlinkListener(b);
}
}
}
// usage: plug-in once in your application code (before creating any buttons)
static {
LookAndFeelAddons.contribute(new ButtonCursorAddon());
}
// here the ButtonCursorUI is in package
// org.jdesktop.swingx.plaf
defaults.add("ButtonUI", "org.jdesktop.swingx.plaf.ButtonCursorAddon$WindowsButtonCursorUI");
// in another package that would be
defaults.add("ButtonUI", myPackageName + ".ButtonCursorAddon$WindowsButtonCursorUI");
通常,您会将不同的委托方放在LAF特定的子包中,而不是在插件本身中。但这只是一个例子 :-)
public static void setButtonCursor(JComponent component, Cursor cursor) {
for (Component comp : component.getComponents()) {
if (comp instanceof JButton) {
comp.setCursor(cursor);
} else if (comp instanceof JComponent) {
setButtonCursor((JComponent)comp, cursor);
}
}
}
这将有一个好的副作用:当你走进 JComboBox
(以及其他组件)并改变它们下拉按钮的光标时,要小心哦 ;)
comp.getClass().equals(JButton.class)
替换comp instanceof JButton
,则将不再有副作用... - aymeric