2014-02-08 26 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進行定位的原因。

隨着你程序的邏輯(數學)和我通過你的提示,我相信你可以輕鬆解決你的問題。如果您仍然有疑問,請不要害羞地問。我最終的目標是幫助你。

祝你的項目好運。 :)