java - 如何不提供不会呈现粗体的字体或强制其为粗体

标签 java swing fonts graphics2d

我有一个缩放功能,可以调整行/列标签的字体大小以匹配显示的网格/图像。与悬停单元格对应的行/列标签是粗体,所有其他标签都是普通标签。但是,有时即使相同大小的垂直列标签显示为粗体,悬停的水平行标签也会显示为普通。

我已经做了一些测试,并确定对于某些字体(例如 Courier),在某些标准字体大小(12、18、24 等)下会发生这种情况,而对于其他字体(例如 Helvetica Neue)则不会。对于所有字体,包括有问题的字体,奇怪的字体大小都会按预期加粗。即使字体没有显示为粗体,当我调用 myfont.isBold() 时,它也会返回 true。

我的评估是,对于某些字体,例如我的 courier 版本,当尺寸是直接从字体库提供的字体时,粗体版本的字体不可用,因此字体默认为清楚的。在字体大小奇怪的情况下,或者当字体垂直呈现时,将应用编程粗体样式。

我说的对吗?如果是这样,我怎样才能捕捉到这种情况何时发生或将要发生,并且要么不提供该字体作为可用字体,要么强制字体在问题大小(例如 12)下呈现为粗体?

这是一个工作示例:

import java.awt.*; 

public class Test {
    public static void main ( String[] args ) {
        class helloFrame extends Frame {
            public void paint( Graphics g ) {
                final Graphics2D g2d = (Graphics2D) g;
                g2d.setFont(new Font("Courier",Font.BOLD,12));
                System.out.println("Style is [" + (g2d.getFont().isBold() ? "bold" : "not bold") + "].");
                g2d.drawString("Hello", 10, 40 );
                g2d.setFont(new Font("Courier",Font.BOLD,13));
                System.out.println("Style is [" + (g2d.getFont().isBold() ? "bold" : "not bold") + "].");
                g2d.drawString("Hello", 10, 55 );
                g2d.setFont(new Font("Courier",Font.BOLD,17));
                System.out.println("Style is [" + (g2d.getFont().isBold() ? "bold" : "not bold") + "].");
                g2d.drawString("Hello", 10, 70 );
                g2d.setFont(new Font("Courier",Font.BOLD,18));
                System.out.println("Style is [" + (g2d.getFont().isBold() ? "bold" : "not bold") + "].");
                g2d.drawString("Hello", 10, 85 );
                g2d.setFont(new Font("Courier",Font.BOLD,19));
                System.out.println("Style is [" + (g2d.getFont().isBold() ? "bold" : "not bold") + "].");
                g2d.drawString("Hello", 10, 100 );
            }
        }

        helloFrame frm = new helloFrame();
        frm.setSize(150,120);
        frm.setVisible(true);
    }
}

打印:

Style is [bold].
Style is [bold].
Style is [bold].
Style is [bold].
Style is [bold].

对于每次打印,即使字体在字体大小 12 和 18 中不显示为粗体:

enter image description here

更新:看来此问题是特定于操作系统的。非粗体文本在 Mac 上很明显,但在 Windows 上一切都按应有的方式显示。

最佳答案

尝试添加:

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                     RenderingHints.VALUE_ANTIALIAS_ON);

这会打开抗锯齿功能,这(至少在我的系统上)极大地改善了字体渲染,并且所有尺寸都显示为粗体。

关于java - 如何不提供不会呈现粗体的字体或强制其为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832286/

相关文章:

encoding - 哪种可打印纸质数据存储格式具有最佳信息容量?

java - 从名为 "- iPhone"的特殊目录中的 Excel VBA 宏启动自动摄取工具

java - 将 split 的值存储在 String[] 数组中,而不使用 String.split()

java - 颜色java类

java - 在 JDateChooser 中选择日期时,日期不正确。为什么?

CSS字体在网站上的使用

python - Linux 上用于 Python 和 Tkinter 的字体管理

java - 为什么我的代码出队无法正常工作?

java - 如何在 JAX-WS CXF 处理程序中获取 SOAP 方法

Java Swingworker 和多线程