2016-11-30 62 views
0

到目前爲止,我嘗試了很多不同的事情來完成這項工作。我似乎無法理解爲什麼這不應該起作用。 我有一個叫StatusRect.java的課。 當使用方法makeRectangleStatus創建新對象時,此類將返回一個矩形。 這個想法是每當一個整數變成一個特定的值時給這個矩形上色。 在類StatusRect.java中,方法changeIntFlag從另一個類中調用。這裏整數正在改變。這樣可行。更改類內矩形的顏色,如狀態

現在我只想在這個StatusRect.java類中改變矩形的顏色。 主要問題實際上是否可以在StatusRect.java課程中設置這種顏色,還是隻能在課外進行? 矩形對象在應用程序的Stage中製作,如下所示。有顏色red作爲參數給出。 任何幫助在這裏非常感謝。

public void start(Stage stage) throws Exception { 

    Rectangle rec = new StatusRect().makeRectangleStatus(50, 700, 20, 20, "red", "black", "btnObj1", 7, 0); 

} 

StatusRect類:

public class StatusRect { 

     private String ColorStatusOn; 
     private String ColorStatusOff; 
     private int IntFlag; 
     Rectangle rec = new Rectangle(); 


     public Rectangle makeRectangleStatus (double x, double y, double Witdh, double Height, String ColorStatOn, String ColorStatOff, String BtnId, int SetIntStatus, int Current){ 
      rec.setLayoutX(x); 
      rec.setLayoutY(y); 
      rec.setWidth(Witdh); 
      rec.setHeight(Height);     
      ColorStatusOn = ColorStatOn; 
      return rec; 
     } 

     public void changeIntFlag(int iEnabled) { 
      if(IntFlag == iEnabled) return; 
      IntFlag = iEnabled; 
      System.out.println("VALUE CHANGED!!!: " + IntFlag); 
      if (IntFlag == 7){ 

       //this is being triggerd every time the int Flag value becomes "7" 
       System.out.println("SAME NUMBER: SET COLOR RECTANGLE TO red"); 

       //Why doesnt the color change here?? 
       rec.setStyle("-fx-fill:" + ColorStatusOn); 
      }     
     } 
    } 
} 
+0

當然可以。你能否顯示你試圖改變它的代碼(例如,你在哪裏調用'changeIntFlag(...)')? –

+0

@James: public void send(MidiMessage InputMsg,long timeStamp){ new StatusRect()。changeIntFlag(Channel); //當收到消息時,此方法會自動觸發。頻道是隨着每條新消息而變化的整數值。 } – Bram

回答

0

你可以改變你makeRectangleStatus方法(如果有必要的Rectangle類中添加一些制定者/吸氣)和直接設置顏色的this.recmakeRectangleStatus。舉例來說,如果你希望你的Rectangle實例去ColorStatOn字符串,試試這個:

public void makeRectangleStatus (double x, double y, double Witdh, double Height, String ColorStatOn, String ColorStatOff, String BtnId, int SetIntStatus, int Current){ 
    rec.setLayoutX(x); 
    rec.setLayoutY(y); 
    rec.setWidth(Witdh); 
    rec.setHeight(Height); 
    rec.setColorStatOn(ColorStatOn); 
} 

除了要注意:你並不需要,因爲你正在使用this.rec對象makeRectangleStatus返回任何東西。

+0

我懷疑[這是OP自己的'Rectangle'類。](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Rectangle.html) – fabian

+0

@ DistribuzioneGaussiana:是的,使用setter直接在makeRectangleStatus中更改它是最有意義的,但是該對象只創建一次,因此值不會被更新。 setvalue每次更改時都應該更新。我試圖用changelistener解決它,但沒有運氣。 – Bram

+0

rec.setColorStatOn是無效的矩形屬性。感謝您的努力。 – Bram

0

我注意到,對象,矩形按鈕等樣式的所有變化都與事件一起工作。像動作事件,移動,觸摸等。 所以當一個動作是真實的,然後改變一些東西。只需制定一套方法並設定一個值就不會做任何事情。您必須評估該值,併爲其添加例如changeproperty偵聽器。與滑塊一樣,滑塊屬​​性的值發生變化並進行綁定。對象只創建一次。 我試着像下面這樣做。我明白,當財產的價值發生變化時,稱爲「變更」的方法會被調用,但遺憾的是這種方法無效。
我認爲這是它的工作方式,但Iam沒有專家。

IntegerProperty currentvalue = new SimpleIntegerProperty(IntFlag); 
currentvalue.addListener(new ChangeListener<Number>(){ 
@Override 
public void changed(ObservableValue <? extends Number> 
observableValue, Number oldValue, Number newValue){ 
System.out.println("CHANGED, LISTENER TRIGGERD!!!!" +newValue); 
} 
});