paintComponent()方法中的消除锯齿

San*_*eev 2 java string graphics swing paintcomponent

我想用这个paintComponent(..)方法打印一些文字.

@Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.red);
    g.drawString("Hello world", 10, 10);
}
Run Code Online (Sandbox Code Playgroud)

但是文字有些麻烦.你怎么能用这种方法用[抗锯齿]强制文本绘图?

谢谢.

Dav*_*amp 5

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

class MyPanel extends JPanel {
    public MyPanel() {
        super(true);//set Double buffering for JPanel
    }
}
Run Code Online (Sandbox Code Playgroud)

或者直接打电话 JComponent#setDoubleBuffered(..).

您还可以为抗锯齿文本消除锯齿等对象设置RenderingHints,以通过以下方式改善Swing绘画质量:Graphics2D

  @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);
}
Run Code Online (Sandbox Code Playgroud)