如何在Nimbus外观中更改边距

3

我正在尝试使用Nimbus外观,但我无法简单地将其插入以替换其他外观,因为它会在每个组件周围添加一些外部填充。

因此,我想要去除这个填充。这是可以更改的默认值列表,但是以下代码没有改变任何内容。

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

其他值表现正常。

如何去除此填充?

编辑

我认为内容边距指的是内部填充。

编辑

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

这应该被视为一个漏洞吗?没有其他 L&F 这样做,而且由于这个额外的填充,无法重用相同的布局(因为之前的布局都假定没有填充)。

2个回答

4
我发现您需要在设置外观和感觉后立即设置这些默认值(即在创建任何UI组件之前):
try {
    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));
    Insets buttonInsets = new Insets(3, 6, 3, 6);
    UIManager.getLookAndFeelDefaults().put("Button.contentMargins", buttonInsets);
}
catch (Exception e) {
    e.printStackTrace();
}
此外,请注意您需要将它们设置为“LookAndFeelDefaults”,而不是“developer”默认。

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默认值中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接