我有一个缩放功能,可以调整行/列标签的字体大小以匹配显示的网格/图像。与悬停单元格对应的行/列标签是粗体,所有其他标签都是普通标签。但是,有时即使相同大小的垂直列标签显示为粗体,悬停的水平行标签也会显示为普通。
我已经做了一些测试,并确定对于某些字体(例如 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);
这会打开抗锯齿功能,这(至少在我的系统上)极大地改善了字体渲染,并且所有尺寸都显示为粗体。
关于java - 如何不提供不会呈现粗体的字体或强制其为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832286/