1
我花了最近24小時試圖學習JavaFX。我試圖構建一個GUI來顯示數據源的值(例如數據庫)。我的問題是這樣做的首選方式。到目前爲止,我想出了這個代碼來構建一個簡單的GUI,並從數據源中的一些數據:間隔更新JavaFX 2 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毫秒是OK的時間間隔來更新這個就我而言,GUI。但這是一個可行的解決方案嗎?
下一步是用來自數據源的值替換文本。一直在觀察Collections和ObservableMap並想知道這是否是實際GUI更新的首選方式?我在內部類和最終變量方面遇到了一些問題,但是可能會在睡眠後引發這些問題。另外,目標機器功能不是很強大(大約在350-512 MB RAM之間)。這可能是一個問題嗎?到目前爲止,我的簡單測試似乎運行良好。
謝謝你對此的任何反饋。
沒有什麼錯你的方法。儘管JavaFX中有一些幫助API,但您可以在這裏找到教程:http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm –