2016-11-30 5 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); //このメソッドは、メッセージが受信されると自動的にトリガされます。 Channelは、新しいメッセージごとに変化するint値です。 } – Bram

答えて

0

あなたのmakeRectangleStatus方法を変更することができます(そして、それはいくつかのセッター/ゲッターを追加し、あなたのRectangleクラス必要な場合)とmakeRectangleStatus内に直接this.recの色を設定します。注意を払うだけでなく

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); 
} 

:たとえば、あなたがあなたのRectangleインスタンスがColorStatOn文字列に行くことにしたい場合は、これを試して、あなたはthis.recオブジェクトを使用しているので、makeRectangleStatusに何かを返す必要はありません。

+0

私はこれが[自分自身の 'Rectangle'クラスです。](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Rectangle.html) – fabian

+0

@ DistribuzioneGaussiana:はい、セッターを使ってmakeRectangleStatus内で直接変更するのが最も理にかなっていますが、オブジェクトは一度しか作成されないため、値は更新されません。 setvalueは、変更するたびに更新する必要があります。私はchangelistenerでそれを解決しようとしましたが運がありません。 – Bram

+0

rec.setColorStatOnには有効な矩形プロパティはありません。努力をいただきありがとうございます。 – Bram

0

私が気づいたのは、オブジェクト、四角形のボタンなどからのスタイルの変更がすべてイベントで機能することでした。アクションイベントと同じように、移動、タッチなど アクションが真のときは、何かが変更されます。設定メソッドを作成して値を設定するだけでは何もしません。値を評価し、たとえば変更プロパティリスナーを追加する必要があります。スライダと同様に、スライダのプロパティの値が変更され、バインドされます。オブジェクトは一度だけ作成されます。 私はこれを次のようにしようとしました。私は、プロパティの値が変わったときに "変更された"というメソッドが呼び出されることを理解しましたが、悲しいことにそれはうまくいきません。
私はこれがうまくいくはずだと思うが、Iam no expert。

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); 
} 
}); 
関連する問題