gpt4 book ai didi

java - 物质 L&F 不起作用

转载 作者:行者123 更新时间:2023-11-29 05:35:22 25 4
gpt4 key购买 nike

我想使用 Substance L&F 库在我的 Java 应用程序中,因此我下载了 .jar 文件并将它们添加到项目类路径中。然后我想在应用程序的 main() 函数中设置 L&F,如下所示:

SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
try
{
// Substance
String skin = "org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel";
SubstanceLookAndFeel.setSkin(skin);
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
}
catch(Exception e)
{
System.err.println("Can't initialize specified look&feel");
e.printStackTrace();
}
}
});

这是在创建 JFrame 之前完成的。然而,即使没有抛出异常,也没有任何反应,GUI 会在默认的 Swing L&F 中呈现。

知道我在这里遗漏了什么吗?

编辑
我尝试使用 UIManager.setLookAndFeel(skin); 代替 SubstanceLookAndFeel.setSkin(skin); 调用。这仍然不起作用,但至少我现在得到一个异常(exception):

org.pushingpixels.substance.api.UiThreadingViolationException:
状态跟踪必须在事件调度线程上完成

通过 invokeAndWait() 调用这个不就解决了吗?

EDIT-2
好的,所以问题有所不同。创建 JTable 时抛出异常,而不是在设置 L&F 时抛出。我能够通过 EventQueue.invokeLater() 调用 JFrame 构造函数(然后基本上运行整个应用程序)来解决问题 - L&F 现在已正确呈现。但我以前从未这样做过,这样做是否“保存”(在 Java 术语中有效)?

最佳答案

设置Substance LaF时有一个小技巧。在调用 UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel"); 之前,您必须调用 UIManager.setLookAndFeel(new SubstanceGraphiteAquaLookAndFeel()); .所以,像这样设置:

public class App {

public static void main(String [] args) {
try {

UIManager.setLookAndFeel(new SubstanceGraphiteAquaLookAndFeel());
UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGraphiteAquaLookAndFeel");

} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable(){
public void run() {
//Your GUI code goes here..
}
});

}
}

关于java - 物质 L&F 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com