Изменить цвет прямоугольника внутри класса, как статус

До сих пор я пробовал так много разных вещей, чтобы заставить эту работу. Я не могу понять, почему это не должно работать. У меня есть класс под названием 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); 
            }                 
        }
    }
}

person Bram    schedule 30.11.2016    source источник
comment
Конечно, может. Можете ли вы показать код, который вы пытались изменить (т.е. куда вы звоните changeIntFlag(...))?   -  person James_D    schedule 30.11.2016
comment
@James: public void send(MidiMessage InputMsg, long timeStamp) { new StatusRect().changeIntFlag(Channel); // этот метод срабатывает автоматически при получении сообщения. Канал — это целочисленное значение, которое изменяется с каждым новым сообщением. }   -  person Bram    schedule 30.11.2016


Ответы (2)


Вы можете изменить свой метод makeRectangleStatus (и, если необходимо, ваш класс Rectangle, добавив несколько сеттеров/геттеров) и установить цвет 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.

person DistribuzioneGaussiana    schedule 30.11.2016
comment
Я сомневаюсь, что это собственный класс Rectangle OP . - person fabian; 30.11.2016
comment
@DistribuzioneGaussiana: Да, использование установщика для его изменения непосредственно внутри makeRectangleStatus имеет смысл, однако объект создается только один раз, поэтому значения не обновляются. Заданное значение должно обновляться каждый раз, когда оно изменяется. Я пытался решить это с помощью changelistener, но безуспешно. - person Bram; 30.11.2016
comment
rec.setColorStatOn не является допустимым свойством прямоугольника. Спасибо за усилия. - person Bram; 30.11.2016

Я заметил, что все изменения стилей объектов, кнопок прямоугольников и т. д. работают с событиями. Например, событие действия, движение, прикосновение и т. д. Итак, когда действие истинно, что-то меняется. Просто создание метода 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);
}
});
person Bram    schedule 30.11.2016