如何以最有效的方式用数据更新自定义Javafx

时间:2018-09-18 13:00:08

标签: java javafx

我有一个工作系统,可以通过用户单击按钮或计时器来更新一个自定义组件。但是我不确定这是否是最有效的方法以及线程安全性。

有没有更好的方法来解决这个问题?

我有基于画布的组件:MyBox 一个保存数据的类:MyColorBox 监听界面:MyColorBoxListener

从主要班级:

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

可以通过计时器更新数据,也可以通过以下方式单击用户来调用:

myboxdata.update();

用户可以选择播放,停止或下一步。播放和停止将控制计时器。如果计时器已停止,则可以单击“下一步”。

我的数据类:

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

0 个答案:

没有答案