paintComponent()方法中的反走样技术

4
我想使用paintComponent(..)方法打印一些文本。
@Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.red);
    g.drawString("Hello world", 10, 10);
}

但是文本看起来有些锯齿状。您如何在这种方法中强制启用[抗锯齿]的文本绘制?

谢谢。


3
你的意思是指抗锯齿而不是双缓冲吗? - mikera
1个回答

9

您可以通过以下方式设置双缓冲:

class MyPanel extends JPanel {
    public MyPanel() {
        super(true);//set Double buffering for JPanel
    }
}

或者简单地调用JComponent#setDoubleBuffered(..)
您还可以通过以下方式为Graphics2D对象设置RenderingHint,如抗锯齿和文本抗锯齿,以改善Swing绘图质量:
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g); 
    Graphics2D graphics2D = (Graphics2D) g;

    //Set  anti-alias!
    graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON); 

   // Set anti-alias for text
    graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 

    graphics2D.setColor(Color.red);
    graphics2D.drawString("Hello world", 10, 10);
}

我认为你应该从答案中删除双缓冲部分以避免混淆。为此,有其他问题可供参考(https://dev59.com/pG855IYBdhLWcg3wSSOm)。 - user202729
我需要在JPanel的构造函数中设置这个策略,还是每次调用paintComponent时都要设置? - hreinn
在构造函数中,您无法访问图形对象。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接