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