Java 为什么使用graphics.drawString()和ClearType的默认JLabel呈现不同的字体?

Java 为什么使用graphics.drawString()和ClearType的默认JLabel呈现不同的字体?,java,fonts,drawstring,cleartype,Java,Fonts,Drawstring,Cleartype,为什么显示的GUI与graphics.drawString()和激活cleartype的默认JLabel具有不同的字体样式/呈现方式?我怎样才能修好它 试试这个 Graphics2D g2d = (Graphics2D)g; Font font = new Font("Arial", Font.PLAIN, 12); g2d.setFont(font); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHin

为什么显示的GUI与
graphics.drawString()
和激活cleartype的默认JLabel具有不同的字体样式/呈现方式?我怎样才能修好它

试试这个

Graphics2D g2d = (Graphics2D)g;    
Font font = new Font("Arial", Font.PLAIN, 12);

g2d.setFont(font);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawString("Hello World", 25, 100);

它可能与用于呈现字符串的选项有关。请注意,尽管建议的解决方案使字体呈现更好一些(或至少有所不同),但它并没有启用cleartype,而只是启用字体抗锯齿。字体抗锯齿使用灰色半透明像素,在CRT显示器上显示良好的图像。Cleartype使用半透明的R和B像素在TFT显示器上提供亚像素的分辨率。TFT可能具有不同的亚像素顺序,因此您永远无法获得与JLabel相同的质量。除非您将JLabel(或由Swing初始化的图形内容)子类化并提取所有抗锯齿设置以供以后使用。