JTree线条样式和Nimbus

7
我是使用Nimbus外观。根据这个链接,您应该能够在JTree中实现3种不同的行样式。

enter image description here

使用以下代码:


theTree.putClientProperty("JTree.lineStyle", "Horizontal");

我的JTree看起来像这样:

enter image description here

它具有“无”样式而不是“水平”样式。任何想法为什么会这样?这与Nmbus有关吗?在设置该属性后,我需要调用特殊的东西吗?
谢谢

@Stack 是的,我是。但是我的 JTree 是自定义的,它不使用 GUI 编辑器。 - user489041
我不确定。看看这个帖子。建议是覆盖setUI和updateUI。 - Bala R
3个回答

6

我不相信Nimbus支持JTree.lineStyle属性,只有MetalLookAndFeel支持。

查看javax.swing.plaf.synth.SynthTreeUI(Nimbus使用的)和MetalTreeUI(Metal使用的)的源代码。

切换到MetalLookAndFeel并查看它是否有效。


有趣。我已经将它更改为Metal LaF,它确实起作用了。有点让人失望的是Nimbus不支持它们。 - user489041
我之前尝试过使用Nimbus来做这件事,但没有找到Nimbus支持的方法。我同意dogbane的答案。 - jzd
@eugener,我还没有。你能提供任何链接或详细信息吗? - user489041
简而言之,您可以通过继承现有的树形单元格渲染器并覆盖其绘制方法来创建自己的树形单元格渲染器,以绘制线条或将默认的JLabel组件放置在面板上,并在面板底部添加分隔符。这是Swing教程中关于树形单元格渲染器的链接(向下滚动一点):http://download.oracle.com/javase/tutorial/uiswing/components/tree.html#display如果您需要更多信息,请告诉我。 - Eugene Ryzhikov

5
事实证明,您可以通过以下方式获得这种效果:
NimbusLookAndFeel laf = new NimbusLookAndFeel();
UIManager.setLookAndFeel(laf);
nimbUID = laf.getDefaults();
nimbUID.put("Tree.drawHorizontalLines", true);
nimbUID.put("Tree.drawVerticalLines", true);

不完美,但接近完美。

1

对于仍然感兴趣的人:

下面的片段对我有效。

NewNimbusLookAndFeel laf = new NewNimbusLookAndFeel();

UIDefaults defs = laf.getDefaults();
defs.put("Tree.drawHorizontalLines", true);
defs.put("Tree.drawVerticalLines", true);
defs.put("Tree.linesStyle", "dashed");

try {
    UIManager.setLookAndFeel(laf);
} catch (UnsupportedLookAndFeelException e) {
    //Error handling code
}

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