Java Mac JVM呈现JTabbedPane与1.6及以上版本的差异
这是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上显示的效果。我怀疑您忽略了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
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
。如果我注释掉这段代码,这个标签就不会损坏。这似乎是有道理的。您可以更新您的问题或。