Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java没有合成斜体字体_Java_Fonts_Awt - Fatal编程技术网

Java没有合成斜体字体

Java没有合成斜体字体,java,fonts,awt,Java,Fonts,Awt,主要问题: OpenJDK中是否有一个像Oracle JDK那样合成斜体字体的设置 背景: 使用OpenJDK,在Graphics2D对象上绘制文本时,文本不会以斜体样式显示,除非有一个斜体字体面注册到所需的字体系列中。Oracle的JDK确实合成了斜体字体。还合成了摆动部件 注意事项: 粗体是合成的,粗体斜体只合成粗体的重量 我知道为了获得最佳效果,斜体字体应该注册。对于已经利用合成字体的应用程序来说,这可能不是一个完美的解决方案 关于JavaFX和字体有很多,这不是JavaFX,只是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。这是一张比较图:


谢谢大家。

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

一些变通办法:

  • 使用斜体字体(如果许可证允许您使用)
  • 将仿射变换应用于字体对象(倾斜-20效果良好)

我可以确认您的问题。但是您的代码显示了与Oracle JDK 11.0.1 Win64相同的行为。在我看来像个虫子。OpenJDK错误数据库中已经有一些类似的错误。谢谢你。OpenJDK bugbase中类似的bug都与JavaFX有关(至少是我见过的那些)——我将继续查找。OracleJDK11.0.1的复制很有趣。OpenJDK使用FreeType作为FontScaler。我想知道Oracle JDK 11.0.1是否也使用FreeType而不是以前使用的T2K FontScaler。根据JDK11发行说明(),他们使用的是FreeType,我也看到了。哦,好吧。也许一个bug报告已经准备好了。再次感谢。仅供参考:错误报告已发送给Oracle。值得一提的是,这已在Java12(上面的错误链接)中修复,我本人在遇到相同的错误后已确认。然而,由于Java11是当前的LTS版本,这种解决方法可能需要几年时间,因为大型组织可能只升级到下一个LTS版本。