填充图形#fillOval看起来很像

时间:2014-10-29 06:36:46

标签: java java-2d

我试图画一个大圆圈并在中心填充一个较小的圆圈。以下是我到目前为止的情况:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(50, 75));

        frame.add(new JPanel() {

            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);

                Graphics2D g2 = (Graphics2D) g;

                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2.setColor(Color.BLACK);
                g2.drawOval(0, 0, 26, 26);
                g2.fillOval(4, 4, 18, 18);
            }

        });

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}

小圆圈没有正确居中,看起来很奇怪。但是,如果我改变g2.fillOval(4,4,18,18);到g2.drawOval(4,4,18,18);它看起来正确居中,但显然没有填充。我希望这两种方法在相同的位置和大小绘制椭圆。我不确定为什么会这样。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好吧,如果我同时调用drawOval和fillOval,它看起来要好得多,就像drawOval纠正了一些丢失的像素一样。

            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2.setColor(Color.BLACK);
            g2.drawOval(0, 0, 26, 26);
            g2.drawOval(4, 4, 18, 18);
            g2.fillOval(4, 4, 18, 18);

如果我仔细观察,东南地区的一些像素是灰色而不是黑色(就好像drawOval效果太薄了),可能使用宽度大于默认值的笔划也会纠正这个问题。