我目前正在开发一个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();
}
}