用Java形成同心圆

时间:2018-04-01 19:37:28

标签: 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()- (dimension))/2, (getWidth()-(dimension))/2, dimension, dimension);
    g.setColor(Color.BLACK);
    g.drawOval((getHeight() - (dimension))/2, (getWidth()-(dimension))/2, dimension, dimension);


    g.drawOval((getHeight()- (dimension))/2, (getWidth()- (dimension))/2, dimension-30, dimension-30);

}//end drawCircle

}//end main

我想我知道问题是什么:-30改变了它,那就是如何形成较小的cirlces,圆圈的原点居中?

1 个答案:

答案 0 :(得分:0)

我认为您需要从维度中减去30,然后更新维度值,如下所示:

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

    g.setColor(Color.WHITE);
    g.fillOval((getHeight() - (dimension)) / 2, (getWidth() - (dimension)) / 2, dimension, dimension);
    g.setColor(Color.BLACK);
    g.drawOval((getHeight() - (dimension)) / 2, (getWidth() - (dimension)) / 2, dimension, dimension);
    // Updated code here:
    dimension -= 30;
    g.drawOval((getHeight() - (dimension)) / 2, (getWidth() - (dimension)) / 2, dimension, dimension);

}//end drawCircle

像这样你应该定期到达不同的圆圈。

可以运行以下代码并在相同距离显示两条圆形线:

import javax.swing.*;
import java.awt.*;

public class Circles extends JFrame {

    public Circles() throws HeadlessException {
        this.setLayout(new BorderLayout());
        final Dimension dimension = new Dimension(600, 600);
        this.setSize(new Dimension(dimension.width + 50, dimension.height + 50));
        this.add(new TargetPanel(dimension), BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        Circles circles = new Circles();
        circles.setLocationRelativeTo(null);
        circles.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        circles.setVisible(true);
    }
}


class TargetPanel extends JPanel {

    public TargetPanel(Dimension dimension) {
        this.setPreferredSize(dimension);
    }//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 = this.getPreferredSize().width;
        int partition = 75;

        drawCircle(g, Color.WHITE, Color.BLACK, dimension);
    }//end draw circle

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

        g.setColor(Color.WHITE);
        final int yCenter = (getHeight() - (dimension)) / 2;
        final int xCenter = (getWidth() - (dimension)) / 2;
        g.fillOval(xCenter, yCenter, dimension, dimension);
        g.setColor(Color.BLACK);
        g.drawOval(xCenter, yCenter, dimension, dimension);

        dimension -= 30;
        g.drawOval((getWidth() - (dimension)) / 2, (getHeight() - (dimension)) / 2, dimension, dimension);

    }//end drawCircle

}//end main