有没有一种方法可以遍历一组圆形,所以我可以确定哪些圆形重叠并更改颜色

时间:2019-04-16 02:47:35

标签: arrays loops javafx geometry

我有一个由50个圆组成的数组,运行应用程序时可以显示它们。我觉得在尝试确定圆之间的距离时逻辑不正确,或者在进行比较后我没有正确设置颜色。

这是我的主圈子课程。分配要求之一是圆必须是其自己的单独类别。

for(let i=0 ; i<limit ; i++)

这是我的主要应用程序代码,我认为这是第二个for循环中存在问题的代码?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package CircleJavier;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import java.util.Random;
import javafx.scene.paint.Paint;
import javafx.scene.transform.Scale;
import javafx.scene.shape.*;


/**
 *
 * @author javyc
 */
public class Circ extends Group {
        Random rand = new Random();
        int x = rand.nextInt(300);
        int y = rand.nextInt(300);
        int rad = rand.nextInt(35);
        Paint fill = Color.RED;

    public Circ()
    {


        Circle cockpit = new Circle();
            cockpit.setCenterX(x);
            cockpit.setCenterY(y);
            cockpit.setRadius(rad);
            cockpit.setFill(fill);



        boolean addAll;
        addAll = getChildren().addAll(cockpit);
                   }


                         }

1 个答案:

答案 0 :(得分:0)

主要问题是您只是使用新值更新了涂料的参考。不适用于圈子。如果要在圆上应用,请在Circ中创建一个接受Paint并在圆上设置的方法。

public class Circ extends Group {
    Random rand = new Random();
    int x = rand.nextInt(300);
    int y = rand.nextInt(300);
    int rad = rand.nextInt(35);
    Paint fill = Color.RED;
    Circle cockpit;
    public Circ() {
        cockpit = new Circle();
        cockpit.setStyle("-fx-stroke-width:1px;-fx-stroke:black;-fx-opacity:.5");
        cockpit.setCenterX(x);
        cockpit.setCenterY(y);
        cockpit.setRadius(rad);
        cockpit.setFill(fill);
        getChildren().addAll(cockpit);
    }

    public void setFill(Color clr) {
        cockpit.setFill(clr);
    }
}

然后通过调用Circ的setFill设置填充。

circleArray[i].setFill(Color.AQUAMARINE);
circleArray[j].setFill(Color.CADETBLUE);
circleArray[i].setFill(Color.BLACK);

设置一些笔触和不透明度可以提供重叠的视觉反馈;)