在过去的 24 小时里,我一直在尝试学习 JavaFX。我正在尝试构建一个显示来自数据源(例如数据库)的值的 GUI。我的问题是首选方法是什么。到目前为止,我已经提出了这段代码来构建一个简单的 GUI 并从数据源获取一些数据:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class AvcHmi extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Text t = new Text(10, 50, "Replace/update this text periodically with data");
Group root = new Group();
root.getChildren().add(t);
primaryStage.setScene(new Scene(root, 400, 300));
primaryStage.show();
new Thread() {
private DataSource dataSource = new DataSource();
{ setDaemon(true); }
@Override
public void run() {
try {
for(;;) {
Thread.sleep(100);
Platform.runLater(new Runnable() {
@Override
public void run() {
System.out.println(dataSource.getDataMap().get("key1"));
}});
}
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}
数据源:
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class DataSource {
Map<String,String> dataMap = new HashMap<>();
public DataSource() {
dataMap.put("key1", "value1");
dataMap.put("key2", "value2");
dataMap.put("key3", "value3");
}
public Map<String, String> getDataMap() {
Random generator = new Random();
int randInt = generator.nextInt();
dataMap.put("key1", "value"+randInt);
return dataMap;
}
}
就我而言,100 毫秒是可以更新此 GUI 的时间间隔。但这是一个可行的解决方案吗?
下一步是用数据源中的值替换文本。一直在查看 Collections 和 ObservableMap 并想知道它是否是进行实际 GUI 更新的首选方式?我在内部类和最终变量方面遇到了一些问题,但可能会在经过一段时间的睡眠后解决。
此外,目标机器不是那么强大(介于 350-512 mb RAM 之间)。这可能是一个问题吗?到目前为止,我的简单测试似乎运行良好。
感谢您对此的任何反馈。