apple.awt.brushMetal在mac 10.7视网膜上看到奇怪的行为

时间:2013-08-30 22:00:01

标签: java macos jvm retina-display look-and-feel

我使用的是10.7.4 Retina。当我使用getRootPane().putClientProperty("apple.awt.brushMetalLook", true);时,我的JFrame看起来并不像预期的那样 我试过在JVM 1.6.0_51上运行它。它看起来像这样:
enter image description here

甚至尝试使用-d32和-d64。

当我在最新的JVM 1.7.0_25上运行它时,它将如下所示:
enter image description here

当我在10.6 mac的JVM 1.6.0_15上运行它时,两者都看起来不应该如此:enter image description here

有没有办法解决这个问题?视网膜分辨率可能是原因吗? 这篇文章与之前提出的问题有点相关:JFrame is lagging on resize

1 个答案:

答案 0 :(得分:2)

是的,您可以通过尽早放置客户端属性来解决此问题。

Documentation说:

  

警告:必须在Window的重量级对等体之前设置此属性   被建造。一旦在组件上调用addNotify(),就会导致   创建重量级同行,改变这个属性没有   效果。

这是一个MWE:

import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World");
        frame.getRootPane().putClientProperty("apple.awt.brushMetalLook", Boolean.TRUE);
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
}

Screenshot of MWE

如果你交换frame.setVisible(true);和我们放置客户端属性的部分,你会得到一个黑框(Mac OS 10.9.4,Java 1.8.0_05):

Bad example

希望,这对你有帮助。