Java没有合成斜体字体

主要问题:

OpenJDK中是否有一个设置可以像Oracle JDK一样合成斜体字体.

背景:

使用OpenJDK,在Graphics2D对象上绘制文本时,除非倾斜字体显示在所需字体系列中,否则文本不会以倾斜样式显示. Oracle的JDK确实合成斜体字体.摆动部件也被合成.

笔记:

>粗体是合成的,粗体斜体只是粗体.
>我知道为获得最佳效果,应注册斜体字样.对于已经利用合成字体外观的应用程序,这可能不是一个完美的解决方案.
>关于JavaFX和字体的信息很多,这不是JavaFX,而是AWT.

这是一个说明问题的简单类.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UnsupportedLookAndFeelException;

public class SimpleFontTest {
    private static Font FONT = new Font("Impact",Font.ITALIC,18);
    private static String TEXT = "The Quick brown Fox";

    public static void main(String args[]) throws UnsupportedLookAndFeelException {     
        if (args.length > 0 && args[0] != null) {
            String fontName = args[0];
            FONT = new Font(fontName,18);
        }

        JFrame f = new JFrame("Simple Font Test: " + System.getProperty("java.vendor"));
        f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label = new JLabel("JLabel: " + TEXT);
        label.setFont(FONT);

        GraphicsConfiguration gc = f.getGraphicsConfiguration();
        BufferedImage image = gc.createCompatibleImage(400,50);
        Graphics2D g = image.createGraphics();
        g.setFont(FONT);
        g.setColor(Color.BLACK);
        g.setBackground(Color.WHITE);
        g.clearRect(0,image.getWidth(),image.getHeight());
        g.drawString("BufferedImage: " + TEXT,10,15);
        g.dispose();
        JLabel picLabel = new JLabel(new ImageIcon(image));

        f.add(label,BorderLayout.PAGE_START);
        f.add(picLabel,BorderLayout.CENTER);
        f.setSize(400,200);
        f.setVisible(true);
    }
}

输出将取决于用于构建和运行该类的JDK.这是一个比较图像:

enter image description here

感谢大家.

最佳答案
因为我不喜欢看到没有答案的问题:这似乎只是从T2K字体渲染器更改为FreeType的结果.

一些解决方法

>制作斜体字体(如果法律允许您许可)
>将AffineTransform应用于Font对象(-20的偏斜效果很好).

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...