【问题标题】:Java AWT fillOval() not workingJava AWT fillOval() 不工作
【发布时间】:2017-02-18 08:33:27
【问题描述】:

我正在开发一个绘制图形的程序,所以我想画点!我希望这些点是圆形的,因为这通常是点的表示方式,据我所知,g2.fillOval(x, y, height, width) 应该在(x, y) 处绘制一个高度为height 和宽度为width 的填充椭圆形。这是我目前的代码:

private void drawCenteredCircle(Graphics g, int x, int y, int radius) {
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setColor(pointColor);
    g2.fillOval(x-radius, y-radius, 2*radius, 2*radius);
    g2.dispose();
}

然后在 JPanelpaintComponent() 方法中调用它。它确实绘制,所以我知道代码正在运行,但由于某种原因,它绘制了一个正方形,如下所示: my square oval :(

我也试过这个:

private void drawCenteredCircle(Graphics g, int x, int y, int radius) {
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setColor(pointColor);
    g2.fill(new Ellipse2D.Float(x-radius, y-radius, 2*radius, 2*radius);
    g2.dispose();
}

但得到了相同的结果。任何有关如何绘制实心圆/椭圆的帮助将不胜感激。

【问题讨论】:

  • 我猜如果没有像样的minimal reproducible example,你就不会得到像样的答案。如果时间至关重要,请查看该链接并考虑创建和发布其中之一。另请注意,所有代码都应在此处发布,而不是在链接中。
  • 除了这次你的问题可能是由于 RenderingHints 设置不正确。测试一下。
  • 链接中没有发布代码,这是我的结果的图像。另外,感谢您提供最小、完整且可验证的示例页面,我一定会通读该页面并使用该格式发布问题。

标签: java swing awt java-2d


【解决方案1】:

您需要设置 Graphic2D 的 RenderingHints 来处理锯齿。这可以消除可能导致您的(小)圆圈呈现为正方形的锯齿。比如:

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 2013-06-08
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2016-01-31
    • 2017-05-15
    • 2022-01-22
    相关资源
    最近更新 更多