皆さん。 私はいくつかの機械を自動的に制御するプログラムを持っています。私は、ワークショップの一時的な状態を示すためにjavaFXが必要です。いくつかのプロセスが次々に実行されており、それぞれのプロセスでは、画面上のイメージを更新する必要があります(単純化し、ラベルを更新する必要があるとします)。他のスレッドからImageViewを更新するjavafx
したがって、機械を制御するメインスレッドがあり、GUIを制御するFXアプリケーションスレッドがあります。
public static void main(String[] args) {
//some processes in the main thread before launching GUI (like connecting to the database)
Thread guiThread = new Thread() {
@Override
public void run() {
DisplayMain.launchGUI();
}
};
guiThread.start();
//some processes after launching the GUI, including updating the image on the screen
}
私はSOとOracleのドキュメント上に、ここで材料の全体の束を読んで、今、私はコントローラを検索し、すべてのこれらのバインディング、観測可能な特性、Platform.runLater、タスクのうち、意味することはできませんそれに接続されているコントローラがあり
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.Label?>
<GridPane alignment="center"
hgap="10" vgap="10"
xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/8"
fx:controller="sample.Controller">
<columnConstraints>
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
</rowConstraints>
<children>
<Pane prefHeight="200.0" prefWidth="200.0">
<children>
<Label fx:id="label" text="Label" />
</children>
</Pane>
</children>
</GridPane>
:、いくつかのクラスなど
へのパラメータとして、私はFXMLファイルを持っているコントローラを渡し、のはそれだけでラベルを示しましょう。私はそれが画像や何かの変化を聞くべき場所だと考えています。
package sample;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
@FXML
public void initialize(URL location, ResourceBundle resources) {
//some listeners?
}
@FXML
private Label label;
public void setlabel(String s) {
label.setText(s);
}
}
また、起動メカニズムとして使用されるDisplay.javaがあります。
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Display extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(loader.load(), 800, 400));
primaryStage.show();
}
static void launchGUI() {
Application.launch();
}
}
最後に、問題は次のとおりです。コントローラのラベルをmain()から更新する方法は?コントローラ間でデータを渡す方法、コントローラ内でメソッドを呼び出す方法についてはたくさんの情報がありますが、私の質問は完全に失われています。