3

我正在尝试使用 Nimbus 外观和感觉,我不能简单地将其插入以替换其他外观,因为它在每个组件周围添加了一些外部填充。

所以,我想删除这个填充。这是可以更改的默认值列表,但是以下代码没有任何更改。

UIManager.put("Button.contentMargins", new Insets(0, 0, 0, 0));

其他值按预期工作。

如何删除此填充?

编辑

我相信内容边距是指内部填充。

编辑

查看源代码,外部填充似乎是硬编码的。我相信添加它是为了允许焦点选择属性。

这应该被认为是一个错误吗?没有其他 L&F 这样做,并且有了这个额外的填充,就不可能重用相同的布局(因为以前的布局都假设没有填充)。

4

2 回答 2

4

我发现您必须在设置外观之后立即设置这些默认值(即,在您开始创建任何 UI 组件之前):

尝试 {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    UIManager.getLookAndFeelDefaults().put("Table.cellNoFocusBorder", new Insets(0,0,0,0));
    UIManager.getLookAndFeelDefaults().put("Table.focusCellHighlightBorder", new Insets(0,0,0,0));
    插图 buttonInsets = new Insets(3, 6, 3, 6);
    UIManager.getLookAndFeelDefaults().put("Button.contentMargins", buttonInsets);
}
捕获(异常 e){
    e.printStackTrace();
}

另请注意,您需要将它们设置为“LookAndFeelDefaults”而不是“开发者”默认值。

于 2009-05-28T06:40:14.380 回答
0

通过调用 getDefaults() 强制 nimbus 首先创建默认值:

NimbusLookAndFeel laf = new NimbusLookAndFeel();
UIManager.setLookAndFeel(laf);
UIDefaults def = laf.getDefaults();
def.put("Button.contentMargins", new Insets(0,0,0,0));
def.put("DesktopIcon.contentMargins", new Insets(0,0,0,0));
def.put("Label.contentMargins", new Insets(0,0,0,0));

如果默认值没有首先初始化,UIManager.put() 不会将设置存储在 nimbus 默认值中。

于 2011-10-06T10:05:55.180 回答