如何为JTable设置不同的外观和感觉?

5

是否可以为特定组件(在我的情况下是JTable)设置不同的L&F?如果可以,如何做到?

编辑:我根据这篇教程编写了这段代码。为什么这段代码不起作用?没有失败或异常,但JTable仍然是原来的样子。

NimbusLookAndFeel nb = new NimbusLookAndFeel();
jTable1.putClientProperty("Windows.Overrides",nb.getDefaults());
jTable1.putClientProperty("Windows.Overrides.InheritDefaults",false);

1
你可以尝试使用表格的 setUI(...) 方法。 - camickr
我尝试过了,但我无法弄清楚应该将什么参数设置为“Nimbus”以设置UI。 - polmarex
为什么?LAF不适合混合使用,即使您成功了,结果很可能会在视觉上混乱...(@camickr-最好不要a)表格不会完全更新自己b)组件可能依赖于全局LAF状态) - kleopatra
还没有解决。看起来似乎不可能 :) 但我仍在等待建议。 - polmarex
1
@kleopatra,我知道这不是个好主意,但人们似乎喜欢做这些疯狂的事情,所以我只是指向方向,让他们自己发现这不是个好主意。人们往往不会听从我们的智慧之言,直到他们亲身证明它行不通为止 :) - camickr
3个回答

1
如果您想将Nimbus L&F应用于按钮,则只需找出负责渲染Nimbus按钮的类是哪个。这个过程与应用自己的自定义L&F的过程完全相同,您只需要在按钮上设置自己的UI类即可。

@user1091733 这不会在Java的API文档中,你需要查看Nimbus本身的文档,或者浏览它的.jar文件。 - millimoose
找不到连文档都没有 :) - polmarex

1

NimbusLookAndFeel nb = new NimbusLookAndFeel(); jTable1.putClientProperty("Windows.Overrides", nb.getDefaults()); jTable1.putClientProperty("Windows.Overrides.InheritDefaults", false); 为什么这段代码不起作用?没有失败或异常,但是jtable仍然保持原样... - polmarex
我根据教程编写了这段代码:http://www.jasperpotts.com/blog/2008/08/skinning-a-slider-with-nimbus - polmarex
@user1091733:为了显示代码,请编辑您的问题,这样它会更易读;一个sscce也会很有帮助。 - trashgod
@paulhudson 我该如何使用它们?如何实现?我已经尝试了上面的代码,但是没有起作用... - polmarex

1

你可以使用一个小技巧,创建一个使用Nimbus外观的虚拟应用程序,创建一个JTable,并执行类似以下代码:

System.out.println (myTable.getUI ().getClass ().getName ());

此时,您将知道在使用Nimbus LAF时用于呈现JTable的UI对象。您可以在调用setUI(TableUI)时使用此类名称来设置您的JTable

myTable.setUI (new ui_manager_class_name ());

正如其他人所说,虽然这并不是我们推荐的做法。LAF通常应该作为一个整体包来使用,而不是2-3个LAF的混合。你的另一种选择可能是使用MultiLookAndFeel,但我从未使用过,所以我不确定它是否能满足你的需求。如果你想正确使用它,你应该阅读相关的tutorial


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