javafx:如何多线程窗口并在它们之间传递信息?

时间:2018-01-03 10:19:55

标签: java multithreading javafx

我目前正在开发一个JavaFX应用程序。这个应用程序包含一个主窗口和几个不同的输入窗口,通过按钮单击打开。

以下代码简化了我的应用程序代码的必要部分。 与在真实应用程序中一样,通过单击主窗口中的按钮,将打开输入窗口。在那里你可以输入文字。到目前为止一切运作良好。

单击提交按钮,输入文本应以某种方式传输到主窗口,输入窗口应该关闭。

我的想法是在第二个线程中打开输入窗口。这样我就可以让主窗口等到提交按钮通知它继续。 不幸的是,到目前为止我还不了解多线程。我花了最后几天试图理解教程和示例,尽管我无法使我的应用程序能够做我想做的事。

请帮我处理工作代码和解释。

主窗口代码:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class MainWindow extends Application
{
    private Text text;


    public static void main(String[] args)
    {       
        launch(args);
    }

    public void start(Stage primaryStage)
    {
        text = new Text("no text yet");

        Button btn = new Button();
        btn.setText("define text");
        btn.setOnAction( (event) -> defineText() );

        GridPane grid = new GridPane();
        grid.add(text, 0, 0);
        grid.add(btn, 0, 1);
        grid.setVgap(10);
        grid.setAlignment(Pos.CENTER);

        primaryStage.setTitle("MainWindow");
        primaryStage.setScene(new Scene(grid, 300, 200));
        primaryStage.show();
    }

    public void defineText()
    {
        // open InputWindow
        InputWindow iw = new InputWindow();
        iw.start(null);

        // wait until InputWindow notifies


        // set text according to input from InputWindow
        String a = iw.getInput();
        text.setText(a);

        // close InputWindow
        iw.closeStage();
    }

}

输入窗口代码:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class InputWindow extends Application
{
    private Stage stage;
    private TextField textField;


    public void start(Stage primaryStage)
    {
        textField = new TextField();

        Button btn = new Button();
        btn.setText("submit");
        btn.setOnAction( (event) -> submitText() );

        GridPane grid = new GridPane();
        grid.add(textField, 0, 0);
        grid.add(btn, 0, 1);
        grid.setVgap(10);
        grid.setAlignment(Pos.CENTER);

        stage = new Stage();
        stage.setTitle("InputWindow");
        stage.setScene(new Scene(grid, 200, 100));
        stage.show();
    }

    public void submitText()
    {
        // notifies, so that MainWindow continues its action

    }

    public String getInput()
    {
        return textField.getText();
    }

    public void closeStage()
    {
        stage.close();
    }

}

0 个答案:

没有答案