2016-11-30 61 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); 
} 
});