Java不能合成斜体字体

时间:2019-01-22 18:50:07

标签: java fonts awt

主要问题:

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, Font.ITALIC, 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, 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

谢谢大家。

1 个答案:

答案 0 :(得分:1)

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

一些解决方法:

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