Rectangle JavaFx更改颜色动态

时间:2014-02-08 16:21:08

标签: javafx

我正在实现一个绘制矩形的应用程序,但现在我需要帮助来改变矩形的颜色,我有这个实现:

    Pane root = new Pane();
    int qtd = 10;
    NumberBinding rectsAreaSize = Bindings.min(root.heightProperty(), root.widthProperty());
    Text texto = new Text("Matriz C");
    texto.setUnderline(true);
    texto.setLayoutX(150);
    texto.setLayoutY(400);

    for (int x = 8; x < qtd + 8; x++) {
        for (int y = 8; y < qtd + 8; y++) {
            Rectangle retangulo3 = new Rectangle();
            retangulo3.setStrokeWidth(2);
            retangulo3.setStroke(Color.BLACK);

            retangulo3.xProperty().bind(rectsAreaSize.multiply(x).divide(qtd * 2.5));
            retangulo3.yProperty().bind(rectsAreaSize.multiply(y).divide(qtd * 2.5));

            retangulo3.heightProperty().bind(rectsAreaSize.divide(qtd * 2.5));
            retangulo3.widthProperty().bind(retangulo3.heightProperty());

            retangulo3.setFill(Color.GREENYELLOW);

            root.getChildren().add(retangulo3);
        }
    }


        root.getChildren().add(texto);

        Text texto1 = new Text("Matriz A");

        texto1.setUnderline(true);
        texto1.setLayoutX(1200);
        texto1.setLayoutY(200);

        for (int x = 30; x < qtd + 30; x++) {
            for (int y = 2; y < qtd + 2; y++) {
                Rectangle retangulo1 = new Rectangle();
                retangulo1.setStrokeWidth(2);
                retangulo1.setStroke(Color.BLACK);

                retangulo1.xProperty().bind(rectsAreaSize.multiply(x).divide(qtd * 2.5));
                retangulo1.yProperty().bind(rectsAreaSize.multiply(y).divide(qtd * 2.5));

            //retangulo.setHeight(10);
                //retangulo.setWidth(10);
                retangulo1.heightProperty().bind(rectsAreaSize.divide(qtd * 2.5));
                retangulo1.widthProperty().bind(retangulo1.heightProperty());

                retangulo1.setFill(Color.WHITE);

                root.getChildren().add(retangulo1);
            }
        }

        root.getChildren().add(texto1);

        Text texto2 = new Text("Matriz B");

        texto2.setUnderline(true);
        texto2.setLayoutX(1200);
        texto2.setLayoutY(500);


        for (int x = 30; x < qtd + 30; x++) {
            for (int y = 13; y < qtd + 13; y++) {

                Rectangle retangulo2 = new Rectangle();
                retangulo2.setStrokeWidth(2);
                retangulo2.setStroke(Color.BLACK);

                retangulo2.xProperty().bind(rectsAreaSize.multiply(x).divide(qtd * 2.5));
                retangulo2.yProperty().bind(rectsAreaSize.multiply(y).divide(qtd * 2.5));

            //retangulo.setHeight(10);
                //retangulo.setWidth(10);
                retangulo2.heightProperty().bind(rectsAreaSize.divide(qtd * 2.5));
                retangulo2.widthProperty().bind(retangulo2.heightProperty());

                retangulo2.setFill(Color.WHITE);
                root.getChildren().add(retangulo2);
            }
        }

        root.getChildren().add(texto2);


        palco.setScene(new Scene(root, 100, 100));
        palco.show();

    }

现在我想制作一个超值的值,并改变我的矩形颜色,如matriz乘法,所以我迷失在我的代码中,因为当我创建矩形时我有很多对象的实例,在同一个窗格中我有三个正方形矩形,我怎么能改变(x,y)的颜色像一个恐怖的东西?如何使用其他尺寸调整图像大小?

1 个答案:

答案 0 :(得分:0)

嗯..关于矩形的定位逻辑,你应该计算它。如果您了解数学逻辑,就可以解决它。毕竟,我们在这里处理语言本身。

关于矩形如何从A点移动到B点,为此您可以使用JavaFX动画库。看看here来了解动画(如果您不知道)。请利用并查看链接中提到的所有类的JavaFX文档。阅读每一篇文章以获得更好的理解。

注意:如果您仍然是新手,或者从其他来源学习过JavaFX,您可以在this link上学到很多关于JavaFX(2.x)的知识。但我想你已经知道了,对吧?

嗯..关于JavaFX中的动画颜色,有一个很好的例子,说明如何在名为Ensemble的演示程序中完成此操作。您可以在下面提到“JavaFX示例演示和下载”的部分找到它。

此外,请记住,JavaFX动画库(主要是keyFrameKeyValueTimeLine)允许您创建任何bean JavaFX property的动画。您可以为某些端设置自己的JavaFX属性,然后按照您希望的方式为它们设置动画。在视频中演示的动画转换中,您可以使用单个时间轴对象来执行所有矩形的移动,以及每个矩形的颜色变化。

对于元素的所需运动,请使用Node类中的现有layoutXY属性。不要使用translateXY属性放置任何内容,因为它们是为了对Node对象位置进行小的最终调整。 layoutXY属性是定义固定位置的属性。在定义layoutXY时,最终可能会在程序中使用过渡动画来精确处理Node对象的translateXY属性。这就是您使用LayoutXY进行定位的原因。

根据您的程序逻辑(数学)和我通过的提示,我相信您可以轻松解决您的问题。如果您对某些事情仍然有疑问,请不要害羞地问。我最终的意图是帮助你。

祝你的项目好运。 :)