gpt4 book ai didi

Java:外观和感觉

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:10 26 4
gpt4 key购买 nike

我在 Windows 机器上使用 Netbeans,如果我运行主 java 文件,我得到的外观和感觉与我运行整个程序的情况不同。意思是如果我这样做: enter image description here

我明白了

enter image description here

但如果我这样做

enter image description here

我得到 enter image description here

您是否看到两个 java 输出的外观和感觉有什么不同?为什么它在那里?我希望当我将它导出到 Jar 时,它应该像第一种情况一样打开,漂亮的按钮。怎么办?

更新 1:我在主程序的开头找到了以下代码:

public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FormTTS.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FormTTS.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FormTTS.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FormTTS.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}

//Some code here...
}

所以它应该设置灵气外观,但问题是当我打开 jar 时,灵气外观不存在

更新 2:我的 Navigator

外观

enter image description here

更新 3:文件结构

enter image description here

最佳答案

I am using Netbeans on a Windows machine, what happens is that if I run the main java file the look and feel I get is different than in the case I run the whole program.

当您运行 Swing 应用程序时,默认外观设置为跨平台 L&F,也称为 Metal .另一方面,当您创建一个新的 JFrame 时从 NetBeans New file 向导中,它还包括一个仅用于测试目的的 main 方法,使开发人员能够“运行”顶级容器。在此 main 方法中,外观设置为 Nimbus正如您在更新 1 中包含的那样。

此问答中对此有很好的解释:How can I change the default look and feel of Jframe? (Not theme of Netbeans) .如那里所述,您可以修改与 JFrame 表单关联的模板以设置您想要的 L&F。但是请注意这一行:

A Java application only needs one main class so this test-only main methods should be deleted when you will deploy your application. [...] the L&F should be established only once at the start-up, not in every top-level container (JFrame, JDialog...).

您也可以查看 Programatically Setting the Look and FeelHow to Set the Look and Feel文章。

编辑

I just did not understand one thing which test-only main methods do i need to delete and if i delete them how will my prg run properly?

Java 应用程序必须只有一个 main 方法来启动执行。当您部署 JAR 时,具有此 main 方法的类在 MANIFEST.MF 文件中定义。因此,不需要在每个顶级容器(JFrameJDialog)中使用 main 方法,这不是一个好的做法。

但是有时您不想运行整个应用程序来测试特定框架/对话框的工作方式。这就是为什么 NetBeans 在 JFrameJDialog 创建中包含此 main 方法的原因。但是如上所述,当您部署 JAR 时,您应该删除那些“额外的”main 方法。

and yah, in that you have given how to do it when i create new jframes, but i already have 20s of them

一个 Swing 应用程序通常有一个 JFrame 和多个 JDialog。查看此主题以获取更多详细信息:The Use of Multiple JFrames, Good/Bad Practice?

And anyways it is nimbus in there and it is what i want, but that is not what is opening

您只需在main 类(运行整个应用程序时执行的类)中以编程方式将 L&F 设置为 Nimbus。您可以将包含在更新 1 中的代码复制并粘贴到那里。

编辑2

当您在 NetBeans 中创建一个新项目时,它也会要求您创建一个主类。假设我创建了一个名为 Test 的新项目,它会要求我创建一个像这样的主类:

enter image description here

此生成的 Test 类将具有触发应用程序执行的 main 方法:

enter image description here

在此主要方法中,您必须将包含在更新 1 中的代码放入:

public class Test {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
} catch (ClassNotFoundException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
});
}

}

然后当您运行您的应用程序时,L&F 将被设置为 Nimbus 覆盖默认的跨平台 L&F。从此以后,所有创建的 Swing 组件都将使用 Nimbus 作为 L&F。

注:SwingUtilities.invokeLater()的原因Initial Threads 中解释了调用文章。

关于Java:外观和感觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758459/

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