gpt4 book ai didi

java - Ubuntu 上的外观问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:19 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它需要一些小部件来使用不同的外观和感觉。应用程序的其余部分使用系统外观。

我的方法是在初始化应用程序时将 LF 换成所需的 LF,创建组件,然后重置 LF。这在 Windows 操作系统上运行良好,但在 Ubuntu 上测试时,它未能以一种奇怪的方式为组件设置 LF。

在 Ubuntu 上,UIManager.getSystemLookAndFeelClassName() 报告 LF 是一个 javax.swing.plaf.metal.MetalLookAndFeel。这是第一个麻烦——我希望它返回 com.sun.java.swing.plaf.gtk.GTKLookAndFeel。奇怪的是,我的方法在程序使用 Metal LF 时有效,但在使用 GTK LF 时失败,它将整个框架和其中的所有组件设置为 GTK LF。

以下 SSCCE 演示了该问题:

import javax.swing.*;
import java.awt.*;

import static javax.swing.UIManager.*;

public class LaFTest {
public static void main(String[] argv) throws ReflectiveOperationException, UnsupportedLookAndFeelException {
String[] keys = {
"java.specification.version",
"java.version",
"java.vm.version",
"java.specification.vendor",
};
for (String key : keys) {
System.out.printf("%-40s%s\n", key, System.getProperty(key));
}

System.out.println(UIManager.getSystemLookAndFeelClassName());

// Swap for "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame = new JFrame("LaF Test");
Container content = frame.getContentPane();
content.setLayout(new GridLayout(2, 0));
JButton button = new JButton("System");
content.add(button);

LookAndFeel previous = getLookAndFeel();
for (LookAndFeelInfo feel : getInstalledLookAndFeels()) {
if (feel.getName().equals("Nimbus")) {
setLookAndFeel(feel.getClassName());
}
}

JButton second = new JButton("Nimbus");
content.add(second);

setLookAndFeel(previous);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

但是请注意,我不确定此问题的重现性。由于快速谷歌显示没有类似的问题,它可能是我的机器特有的问题。无论如何,从 Ubuntu 12 更新到 13,以及从 13 更新到 14 时,它一直存在。据此我认为这是 Swing 的问题,而不是底层系统的问题。

上面程序的输出是,在我的机器上,

java.specification.version              1.7
java.version 1.7.0_51
java.vm.version 24.51-b03
java.specification.vendor Oracle Corporation
javax.swing.plaf.metal.MetalLookAndFeel

使用金属感,得到的窗口是

with metal feel

换成 GTK 的感觉,

GTK feel overriding

我已经研究了一段时间了,但没有结果。有什么我想念的吗?任何人都可以重现这个,如果是的话,它是 Java 发行版中的错误还是我的代码中的错误?有没有更好的方法来实现我的目标?

最佳答案

我很想对此进行深入调试,但临近截止日期迫使我安装 Oracle Java 包,从而解决了这个问题。一个令人失望的答案,但它确实永久地解决了这个问题。

关于java - Ubuntu 上的外观问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305850/

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