【问题标题】:Drawing a Bull's eye target using Loops使用循环绘制靶心目标
【发布时间】:2018-04-01 03:00:29
【问题描述】:

所以我必须在 java.swing 中创建一个靶心目标。 起初我尝试对每个单独的圆圈进行硬编码,但问题是圆圈不会居中。所以我希望有一种更简单的方法使用循环而不是在每个循环中进行硬编码。这是我尝试硬编码时的代码:

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

import javax.swing.JPanel;

public class TargetPanel extends JPanel {



public TargetPanel() {
    this.setPreferredSize(new Dimension(800,800));
}//end constructor

public void paintComponent(Graphics g) {

    Color blue = new Color(0, 100, 0);
    Color yellow = new Color(100, 0, 0);

    super.paintComponent(g);
    int dimension = 800;
    int partition = 75;


    drawCirlce(g, Color.WHITE, Color.BLACK, dimension);


}//end draw circle

private void drawCirlce(Graphics g, Color blue, Color yellow, int dimension) {

    g.setColor(Color.WHITE);
    g.fillOval((getHeight()/2) - (dimension/2), (getWidth()/2)-(dimension/2), dimension, dimension);
    g.setColor(Color.BLACK);
    g.drawOval((getHeight()/2) - (dimension/2), (getWidth()/2)-(dimension/2), dimension, dimension);

    g.setColor(Color.WHITE);
    g.fillOval((getHeight()/2) - (dimension/2), (getWidth()/2)-(dimension/2), dimension-25, dimension-25);
    g.setColor(Color.BLACK);
    g.drawOval((getHeight()/2) - (dimension/2), (getWidth()/2)-(dimension/2), dimension-25, dimension-25);


}//end drawCircle

}//end main

如您所见,这创建了一个较小的圆圈,但并没有完全形成靶心目标模式。 我再次认为它可以以更简单的方式完成,我只是不确定如何去做。并认为制作一个循环会更容易。也许有人可以为我指明正确的方向。

【问题讨论】:

  • 不要像那样创建蓝色和黄色。只需使用 Color.BLUE 和 color.YELLOW。还有,你的黄色真的很红。
  • 颜色只是我完成目标时的占位符。我不太担心颜色,因为我正在为靶心目标找到正确的图案
  • 抱歉,我无法抗拒:也许你的圈子不想居中,因为你拼写了 circle。

标签: java


【解决方案1】:

不要使用(getHeight()/2) - (dimension/2)之类的代码,如果高度和尺寸都是奇数,你会截断它们,答案会是错误的。

最好使用(getHeight() - dimension)/2

请注意,drawOval() 的 x,y 坐标是包含椭圆的矩形的左上角,而不是中心。

此外,如果您不尝试将所有内容放在一行中,以后阅读和编辑会更容易:

int x = ...;
int y = ...;
int width = ...;
int height = ...;
g.fillOval(x,y,width,height);

【讨论】:

  • 好吧,有道理!谢谢!知道如何使用 for 循环创建模式吗?
  • 在循环外声明 x、y、width、height,然后循环 n 次,其中 n 是要绘制的环数。从外环开始,随着你的进去填充越来越小的圆圈。你只需在每次循环中重新计算 4 个值并绘制新的(更小的)填充椭圆。
  • 如何使每个圆圈居中?它似乎没有形成模式
猜你喜欢
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多