我有一个工作系统,可以通过用户单击按钮或计时器来更新一个自定义组件。但是我不确定这是否是最有效的方法以及线程安全性。
有没有更好的方法来解决这个问题?
我有基于画布的组件: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();
}
}