更改类中矩形的颜色,如状态

时间:2016-11-30 12:42:03

标签: java javafx changelistener

到目前为止,我尝试了很多不同的事情来完成这项工作。我似乎无法理解为什么这不起作用。 我有一个名为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); 
            }                 
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您可以更改makeRectangleStatus方法(如果您的Rectangle课程需要添加一些setter / getters),并在this.rec内直接设置makeRectangleStatus的颜色。例如,如果您希望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);
} 

除了注意:由于您使用makeRectangleStatus对象,因此无需在this.rec中返回任何内容。

答案 1 :(得分:0)

我注意到,对象,矩形按钮等样式的所有更改都与事件有关。喜欢动作事件,移动,触摸等。 因此,当一个动作为真时,就会发生变化。只需创建一个set方法并设置一个值就不会做任何事情。您必须评估该值并添加例如changeproperty侦听器。与滑块一样,当滑块的属性值发生更改并绑定时。对象只创建一次。 我试着像下面这样做。我知道当属性的值发生变化时会调用名为“changed”的方法,但遗憾的是它不起作用 我认为这是应该的方式,但我不是专家。

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