Java 浮动字体大小在OpenJDK中不起作用

Java 浮动字体大小在OpenJDK中不起作用,java,fonts,awt,fontmetrics,Java,Fonts,Awt,Fontmetrics,浮动字体大小在OpenJDK中不起作用。 在计算字符串边界时,字体大小似乎已四舍五入 e、 g.11.4->11和11.5->12 然而,在OracleJDK中,它工作得非常好 知道如何在OpenJDK 8中解决这个问题吗 节目: import java.awt.Font; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; public class TestFont

浮动字体大小在OpenJDK中不起作用。 在计算字符串边界时,字体大小似乎已四舍五入 e、 g.11.4->11和11.5->12 然而,在OracleJDK中,它工作得非常好

知道如何在OpenJDK 8中解决这个问题吗

节目:

    import java.awt.Font;
    import java.awt.font.FontRenderContext;
    import java.awt.geom.Rectangle2D;

    public class TestFont {
        public static void main(String  []args){
            FontRenderContext frc = new FontRenderContext(null, true, true);
            Font font = new Font("Courier New",0,(int)11.5);
            font = font.deriveFont(11.5f);
            Rectangle2D bound = font.getStringBounds("PAGE",0,4, frc);
            System.out.println("Char width:"+ bound.getWidth() / 4);
            Font2D font2D = FontUtilities.getFont2D(font);
            System.out.println("Font2D:" + font2D.toString());
        }
    }
OpenJDK 7,8,9:
Char width:7.201171875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf

Oracle JDK 8:
Char width:6.901123046875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf
结果:

    import java.awt.Font;
    import java.awt.font.FontRenderContext;
    import java.awt.geom.Rectangle2D;

    public class TestFont {
        public static void main(String  []args){
            FontRenderContext frc = new FontRenderContext(null, true, true);
            Font font = new Font("Courier New",0,(int)11.5);
            font = font.deriveFont(11.5f);
            Rectangle2D bound = font.getStringBounds("PAGE",0,4, frc);
            System.out.println("Char width:"+ bound.getWidth() / 4);
            Font2D font2D = FontUtilities.getFont2D(font);
            System.out.println("Font2D:" + font2D.toString());
        }
    }
OpenJDK 7,8,9:
Char width:7.201171875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf

Oracle JDK 8:
Char width:6.901123046875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf

我就是这么想的。以下是与您的问题相关的主题:


您是否可以在每种情况下显示完整的字体定义:open jdk和oracle没有相同的可用字体,因此如果找不到您的字体,jdk将使用默认字体,该字体可能完全不同。我在结果中添加了字体信息。两者都使用相同的字体文件。在调试过程中,我注意到两个jdk都使用不同的字体定标器Oracle jdk:T2KFontScaler打开jdk:FreetypeFontScaler,我不确定这是否会影响可能的重复。不幸的是,我还使用Oracle jdk(jdk-8、jdk-8u5、jdk-8u102、jdk-8u201)进行了大量测试,同样,没有考虑浮点大小。小于11.5的每个值四舍五入为11,大于11.5的值四舍五入为12。我过去常用图形书写文字。有人找到解决办法了吗?