Как обновить пользовательский Javafx с данными наиболее эффективным способом - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть рабочая система, в которой один пользовательский компонент может быть обновлен нажатием кнопки пользователя или таймером.Но я не уверен, что это самый эффективный способ, и если он потокобезопасен.

Есть ли лучший способ решить эту проблему?

У меня есть компонент, основанный на Canvas: класс MyBox Oneкоторый содержит данные: MyColorBox Интерфейс прослушивания: MyColorBoxListener

Из основного класса:

pane.getChildren().add( new MyBox( myboxdata));

Данные могут обновляться таймерами или щелчком пользователя по телефону:

myboxdata.update();

Пользователь может выбрать Play, Stop или Next.Play и Stop будут управлять таймером.Если таймер остановлен, можно будет нажать Далее.

Мой класс данных:

import javafx.scene.paint.Color;

public class MyColorBox {
    Color color[] = new Color[]{Color.BLUE, Color.RED, Color.GREEN};
    Color color_second;
    int counter = 0;

    MyColorBoxListener listener;

    public MyColorBox(MyColorBoxListener listener) {
        this.listener = listener;
    }

    public MyColorBox() {
        setListener(null);
    }

    public void setListener(MyColorBoxListener listener) {
        this.listener = listener;
    }

    public void update() {
        if(++counter>=color.length) counter=0;
        if(listener!=null)
            listener.updated();
    }

    public Color getCurrentColor() {
        return color[counter];
    }
}

Интерфейс прослушивателя:

public interface BouncingBoxListener {
    public void updated();
}

Мой компонент:

    public class MyBox extends Canvas implements MyColorBoxListener {
        MyColorBox box;

        public MyBox( MyColorBox box) {
            super(100,100);
            this.box = box;

            box.setListener(this);

            draw();
        }

        public void draw() {
            GraphicsContext gc = this.getGraphicsContext2D();
            gc.setStroke( box.getCurrentColor());
            gc.setLineWidth(2);
            gc.strokeRect(0,0, this.getWidth(), this.getHeight());

        }
    @Override
    public void updated() {
        draw();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...