为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 UIDefault 为 swing 创建新的外观

如何使用 UIDefault 为 swing 创建新的外观

守候你守候我 2023-05-17 14:31:14
我正在为 Java 开发一种新的外观和感觉;这种外观导入了 Material 风格。我曾使用 UIDefault 导入观感内部的更改,所以现在我必须卸载观感,但此操作存在问题。外观和感觉 con 没有正确删除,现在我已经将 UIDefault 映射用于所有操作,我认为这是一个错误,因为我的常量覆盖旧常量并且当我去删除我的外观和感觉时。新的外观和感觉不会覆盖我的常数这就是我使用 UIDefault 的方式@Override    protected void initComponentDefaults(UIDefaults table) {        super.initComponentDefaults(table);        table.put("Button.highlight", MaterialColors.GRAY_400);        table.put("Button.opaque", false);        table.put("Button.border", BorderFactory.createEmptyBorder(7, 17, 7, 17));        table.put("Button.background", MaterialColors.GRAY_200);        table.put("Button.foreground", MaterialColors.COSMO_BLACK);        table.put("Button.disabledBackground", MaterialColors.COSMO_DARK_GRAY);        table.put("Button.disabledForeground", MaterialColors.BLACK);        table.put("Button[Default].background", MaterialColors.LIGHT_BLUE_500);        table.put("Button[Default].foreground", Color.WHITE);        table.put("Button.font", MaterialFontFactory.getInstance().getFont(MaterialFontFactory.BOLD));        //table.put("Button[Default].mouseHoverColor", MaterialColors.LIGHT_BLUE_200);        table.put("Button.mouseHoverColor", MaterialColors.GRAY_500);        table.put("Button.mouseHoverEnable", true);        table.put("Button.focusable", true);        table.put("Button[focus].color", MaterialColors.GRAY_900);        table.put("Button.disabledText", MaterialColors.GRAY_600);        table.put("CheckBox.font", MaterialFontFactory.getInstance().getFont(MaterialFontFactory.BOLD));        table.put("CheckBox.background", MaterialColors.WHITE);        table.put("CheckBox.foreground", MaterialColors.BLACK);        table.put("CheckBox.disabledText", MaterialColors.COSMO_STRONG_GRAY);        table.put("CheckBox.icon", new ImageIcon(MaterialImageFactory.getInstance().getImage(MaterialImageFactory.UNCHECKED_BLACK_BOX)));        table.put("CheckBox.selectedIcon", new ImageIcon(MaterialImageFactory.getInstance().getImage(MaterialImageFactory.CHECKED_BLACK_BOX)));    }
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

这可能是您使用 L&F 的问题。您放入的所有资源UIManager(原语除外)都必须是接口的实例javax.swing.plaf.UIResource。Swing 提供了一些预定义的类,例如、ColorUIResource、等,您可以在代码中使用它们。BorderUIResourceIconUIResource

为什么需要它?这个界面告诉下一个 Look-n-Feel,当它应用它的设置时,这个设置可以被改变。

代码示例:

table.put("OptionPane.warningDialog.titlePane.shadow", new ColorUIResource(MaterialColors.COSMO_STRONG_GRAY));
table.put("FormattedTextField.border", new BorderUIResource(BorderFactory.createEmptyBorder(3, 5, 2, 5)));
table.put("List.font", new FontUIResource(MaterialFontFactory.getInstance().getFont(MaterialFontFactory.MEDIUM)));

当您的工厂以 UIResource 实例的形式提供资源时,可能会更好。

查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信