2014-02-08 25 views
1

我实现一个应用程序来绘制矩形,但现在我需要帮助改变我的矩形的颜色,我有这样实现:矩形了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(); 

    } 

现在我想打一个值superinduce和改变我的矩形颜色像矩阵乘法,所以我迷失在我的代码中,因为当我创建矩形时,我有很多对象的实例,在同一个窗格中,我有三个矩形的矩形,我怎样才能改变颜色(x,y)像一个动态的东西?我怎么能用另一个尺寸来调整我的形象?

+0

我不明白你的问题很好......你会试图动态改变你的矩形的颜色作为一个事件发生?也许你应该看看rgb类的Color类的静态方法。您将可以通过更好的控制选择您想要的颜色范围。知道一点数学,你可以计算所需的颜色,因为你的矩形产生。我不知道这是不是你想要的。如果您有任何问题或者这对您没有帮助,请在这里留言,我会尝试其他选择。 – Loa

+0

嗨,感谢您关注我的问题,以及我的问题是ilustrate一个矩阵乘法,根据我的发布的代码我需要得到矩阵A x矩阵B =矩阵C,并且我想在矩阵A中执行时间线[0]与红色和同一时间矩阵B列[0]与红色也是更多..输入在矩阵C位置[0,0]与红色...并使它对我所有的矩形,但与另一种颜色沿着动画的时间。 –

+0

在我的代码中,我使用颜色类..xD –

回答

0

那么..关于你的矩形定位逻辑将是一件事情,你应该计算它。如果你知道数学逻辑,你可以解决它。毕竟,我们在这里处理语言本身。

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

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

嗯..关于JavaFX中的动画颜色,在演示程序Ensemble中有一个很好的例子。您可以在下面提到的部分“JavaFX示例演示和下载”中找到它。此外,请记住,JavaFX动画库(主要是keyFrame,KeyValueTimeLine)允许您创建任何bean JavaFX property的动画。你可以设置你自己的JavaFX属性,然后按照你想要的方式为它们设置动画。在视频中演示的动画翻译中,您可以使用单个时间轴对象执行所有矩形的移动,以及每个矩形的颜色变化。

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

随着你程序的逻辑(数学)和我通过你的提示,我相信你可以轻松解决你的问题。如果您仍然有疑问,请不要害羞地问。我最终的目标是帮助你。

祝你的项目好运。 :)