Я провел как последние 24 часа, пытаясь выучить JavaFX. Я пытаюсь создать графический интерфейс, который будет отображать значения из источника данных (например, базы данных). Мой вопрос заключается в том, что это лучший способ сделать это. До сих пор я придумал этот код, чтобы создать простой графический интерфейс и получить некоторые данные из источника данных:Обновите графический интерфейс JavaFX 2 через определенные промежутки времени?
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();
}
}
Datasource:
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, насколько мне известно. Но является ли это жизнеспособным решением?
Следующим шагом является замена текста на значение из источника данных. Посмотрите на коллекции и ObservableMap и задаетесь вопросом, является ли это предпочтительным способом обновления фактических GUI? Я учусь о некоторых проблемах с внутренними классами и конечными переменными, но могу предположить, что после некоторого сна.
Кроме того, целевая машина не настолько мощная (где-то между 350-512 МБ ОЗУ). Может ли это быть проблемой? До сих пор мои простые тесты работают нормально.
Благодарим вас за отзыв.
Там нет ничего плохого с вашим подходом. Хотя в JavaFX есть немного полезного API, вы можете найти учебник здесь: http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm –