Mac JVM渲染JTabbedPane差异在1.6及以上

时间:2014-03-06 07:03:08

标签: java macos swing border jtabbedpane

这是JTabbedPane在Java 1.6中呈现的方式:

JTabbedPane rendered perfectly in Java 1.6

使用Java 1.7(或1.8 EA)时,请看截图的标签底部:

JTabbedPane rendered badly in Java 1.7 and 1.8

我尝试过,没有任何成功(或影响)系统属性 -Dcom.apple.macos.smallTabs = true -Dcom.apple.smallTabs = true

感谢任何解决方案或黑客行为。

2 个答案:

答案 0 :(得分:3)

运行此example,我无法使用Java 7重现Mac OS X 10.9.2上显示的效果。我怀疑您忽略了pack()封闭的Window,但是您可以将您的代码与显示的代码进行比较。

image

答案 1 :(得分:0)

发现了这个问题。在SwingUtilities.invokeLater块中构建UI之前,我有一个名为的代码:

import java.awt.Font;
import java.util.ArrayList;
import java.util.Enumeration;
import javax.swing.UIManager;

...

Font f = new Font(Font.DIALOG, Font.PLAIN, 12);
ArrayList<String> excludes = new ArrayList<String>();
Enumeration itr = UIManager.getDefaults().keys();
while(itr.hasMoreElements()){
    Object o = itr.nextElement();
    if(o instanceof String) {
        String key = (String) o;
        Object value = UIManager.get (key);
        if ((value instanceof javax.swing.plaf.FontUIResource)
                && (!excludes.contains(key))){
            UIManager.put (key, f);
        }
    }
}

我希望所有UI元素在我的应用程序中都有统一的Font。当我评论这个块时,UI渲染就像在Java 6中一样出现。似乎是后来Java版本中的一个错误。