Java Mac JVM呈现JTabbedPane与1.6及以上版本的差异

Java Mac JVM呈现JTabbedPane与1.6及以上版本的差异,java,macos,swing,border,jtabbedpane,Java,Macos,Swing,Border,Jtabbedpane,这是JTabbedPane在Java 1.6中的呈现方式: 使用Java 1.7(或1.8 EA)时,请参见选项卡底部的裁剪: 我尝试了系统属性-Dcom.apple.macos.smallTabs=true和-Dcom.apple.smallTabs=true,但没有任何成功(或效果) 对此,任何解决方案或黑客都将不胜感激。运行此程序,我无法使用Java 7重现Mac OS X 10.9.2上显示的效果。我怀疑您忽略了pack() 找到了问题。我在SwingUtilities.invoke

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

使用Java 1.7(或1.8 EA)时,请参见选项卡底部的裁剪:

我尝试了系统属性-Dcom.apple.macos.smallTabs=true和-Dcom.apple.smallTabs=true,但没有任何成功(或效果)

对此,任何解决方案或黑客都将不胜感激。

运行此程序,我无法使用Java 7重现Mac OS X 10.9.2上显示的效果。我怀疑您忽略了
pack()


找到了问题。我在
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);
        }
    }
}
导入java.awt.Font;
导入java.util.ArrayList;
导入java.util.Enumeration;
导入javax.swing.UIManager;
...
Font f=新字体(Font.DIALOG,Font.PLAIN,12);
ArrayList excludes=新的ArrayList();
枚举itr=UIManager.getDefaults().keys();
while(itr.hasMoreElements()){
对象o=itr.nextElement();
如果(字符串的o实例){
字符串键=(字符串)o;
对象值=UIManager.get(键);
if((javax.swing.plaf.FontUIResource的值instanceof)
&&(!excludes.contains(key))){
UIManager.put(键,f);
}
}
}

我希望所有UI元素在我的应用程序中都有统一的字体。当我对这个块进行注释时,UI呈现出现在Java6中。在以后的Java版本中似乎是一个bug。

您的示例对我来说也运行良好。但当我运行我的系统时,情况并非如此。是的,我会按照您提到的那样做。还要验证您是否正在计算机上构建GUI;一些API发现了问题。我在初始化Swing UI之前使用它:
javax.Swing.UIManager.put(key,f)使用自定义字体
f
。如果我注释掉这段代码,这个标签就不会损坏。这似乎是有道理的。您可以更新您的问题或。