Java 如何不提供赢得';不要渲染为粗体或强制它为粗体

Java 如何不提供赢得';不要渲染为粗体或强制它为粗体,java,swing,fonts,graphics2d,Java,Swing,Fonts,Graphics2d,我有一个缩放功能,可以调整行/列标签的字体大小以匹配显示的网格/图像。与悬停单元格对应的行/列标签为粗体,所有其他标签为普通标签。但是,有时,即使相同大小的垂直列标签显示为粗体,悬停的水平行标签也会显示为普通 我已经做了一些测试,并确定这是发生在某些字体(如Courier)的某些标准字体大小(12、18、24等),而不是其他字体(如Helvetica Neue)。所有字体(包括有问题的字体)的奇数字体大小均按预期粗体显示。即使字体不显示为粗体,当我调用myfont.isBold()时,它也会返回

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

我已经做了一些测试,并确定这是发生在某些字体(如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时不显示为粗体:

更新:此问题似乎与操作系统有关。非粗体文本在Mac电脑上很明显,但在Windows上,所有内容都会显示出来。

尝试添加:

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

这将启用抗锯齿,这(至少在我的系统上)将极大地改善字体渲染,并且所有大小都显示为粗体。

OK@Andrew Thompson,我提供了一个工作示例。这就是你的意思吗?