相关答案,但不适用于OpenJDK 7:https://stackoverflow.com/a/2266260/1648987(SwingUtilities2
类移动并更改了其API。)
我想显示几个标签,我希望它们可以在使用抗锯齿渲染之间进行切换。我这样做是为了比较,看看如何使用和不使用抗锯齿渲染字体。现在,我试图通过继承JLabel
来实现这一目标。这就是我所拥有的:
import java.awt.*;
import javax.swing.JLabel;
public class AALabel extends JLabel {
/* skipped boring stuff */
public boolean antialiased;
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (antialiased) {
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
} else {
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_SPEED);
}
super.paintComponent(g2);
}
}
但它什么都没做。无论如何,标签都是抗锯齿的。
我在Linux上使用OpenJDK7,但我希望它也适用于Java 8。
我还考虑转换为手动绘制的JPanel
(你知道,@Override public void paint(Graphics g)
,这种东西)。如果我这样做,我怎样才能确保它在布局管理器方面的行为相同 - 最重要的是,它具有相同的首选高度并在字体更改时正确调整大小?
答案 0 :(得分:0)
尝试使用:
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//g2.drawString(...);
在绘制抗锯齿文本之前。 然后当你不需要抗锯齿时,在绘制非抗锯齿文本之前禁用它:
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
//g2.drawString(...);