【问题标题】:JavaFX Taking InputJavaFX 接受输入
【发布时间】:2020-01-28 06:46:41
【问题描述】:

所以我想做的是:

1) 获取从 TextInputDialog "td" 输入的输入,然后将其存储在一个变量中 2) 使用上面的输入为 ComboBox 中我的 ExampleDialog 类上的自定义对话框设置默认选项自动更改到顶部输入。

即所以下次用户进入自定义对话框时,选择项组合框将是他们在文本对话框中输入的内容。

我尝试这样做并创建一个新的文本字段等,因此您可能会看到一些类似于此 JavaFX UI 控件的随机代码

这只是练习,但如果其他人帮助我,我会从中学习。

TLDR:从文本字段中获取输入并将其存储为变量 使用

第一堂课(第 47-51 行我试图创建一个新的文本字段JavaFX UI Controls (TextFields))

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class MenuDemo extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        MenuBar menuBar = new MenuBar();

        Menu fileMenu = new Menu("File");
        Menu helpMenu = new Menu("Help");

        MenuItem factoryPopUpMI = new MenuItem("Factory PopUp...");
        MenuItem myDialogMI = new MenuItem("Custom Dialog Box");
        MenuItem savePopUpMI = new MenuItem("Save");
        MenuItem exitMI = new MenuItem("Exit");
        MenuItem aboutMI = new MenuItem("About...");

        fileMenu.getItems().add(factoryPopUpMI);
        fileMenu.getItems().add(myDialogMI);
        fileMenu.getItems().add(savePopUpMI);
        fileMenu.getItems().add(new SeparatorMenuItem());
        fileMenu.getItems().add(exitMI);

        helpMenu.getItems().add(aboutMI);

        menuBar.getMenus().addAll(fileMenu, helpMenu);

        TextInputDialog td = new TextInputDialog();
        td.setTitle("Question");
        td.setHeaderText("What is your favourite football team?");

        Label label1 = new Label("Name:");
        TextField textField = new TextField();
        HBox hb = new HBox();
        hb.getChildren().addAll(label1, textField);
        hb.setSpacing(10);

        exitMI.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                System.exit(0);
            }
        });

        factoryPopUpMI.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                td.show();

            }
        });

        myDialogMI.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                ExampleDialog dialog = new ExampleDialog();
                dialog.initModality(Modality.APPLICATION_MODAL);
                dialog.initOwner(primaryStage);
                dialog.show();
            }
        });

        savePopUpMI.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                Alert saveAlert = new Alert(Alert.AlertType.WARNING);
                saveAlert.setTitle("Alert");
                saveAlert.setContentText("File Saved");
                saveAlert.setHeaderText("Save Successful");
                saveAlert.showAndWait();
            }
        });


        VBox vb = new VBox();
        vb.getChildren().add(menuBar);

        Scene scene = new Scene(vb, 350,150);

        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFX Menu Demo");
        primaryStage.show();

    }
}

二等:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ExampleDialog extends Stage {
    private ComboBox<String> selectionCombo;
    private CheckBox showResultsCheckBox;
    private TextField resultTextField;

    ExampleDialog(){
        HBox makeSelectionBox = new HBox();
        makeSelectionBox.setSpacing(25);
        makeSelectionBox.setPadding(new Insets(10));
        makeSelectionBox.setAlignment(Pos.CENTER);

        HBox showSelectionBox = new HBox();
        showSelectionBox.setSpacing(25);
        showSelectionBox.setPadding(new Insets(15));

        HBox buttonsBox = new HBox();
        buttonsBox.setSpacing(30);
        buttonsBox.setPadding(new Insets(10));
        buttonsBox.setAlignment(Pos.CENTER);



        Label selectionLabel = new Label("Select Team");

        selectionCombo = new ComboBox<>();
        selectionCombo.getItems().addAll("Arsenal", "Chelsea", "Liverpool", "Manchester City", "Manchester United");

        showResultsCheckBox = new CheckBox("Show Selections");
        showResultsCheckBox.setSelected(true);

        resultTextField = new TextField("No Selection Made");

        Button okButton = new Button("OK");

        Button cancelButton = new Button("Cancel");


        selectionCombo.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                doSelectionUpdate();
            }
        });

        okButton.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                ExampleDialog.this.close();
            }
        });

        cancelButton.setOnAction(new EventHandler<>() {
            @Override
            public void handle(ActionEvent event) {
                ExampleDialog.this.close();
            }
        });


        makeSelectionBox.getChildren().addAll(selectionLabel, selectionCombo);
        showSelectionBox.getChildren().addAll(showResultsCheckBox, resultTextField);
        buttonsBox.getChildren().addAll(okButton, cancelButton);

        VBox dialogBox = new VBox(makeSelectionBox, showSelectionBox, buttonsBox);


        Scene dialogScene = new Scene(dialogBox, 375, 150);

        this.setScene(dialogScene);
    }

    private void doSelectionUpdate() {
        if (showResultsCheckBox.isSelected()){
            resultTextField.setText("Selected Team is " + selectionCombo.getValue());
            System.out.println(selectionCombo.getValue());
        }
    }
}

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    TextInputDialog 有一个名为showAndWait() 的方法,它返回一个Optional&lt;String&gt;(即一个包含String 或为空的对象)。

    您可以使用它来捕获对话框中的输入。例如:

    TextInputDialog dialog = new TextInputDialog();  // create an instance
    
    dialog.setTitle("Title");
    // other formatting etc
    
    Optional<String> result = dialog.showAndWait();  
    // this shows the dialog, waits until it is closed, and stores the result 
    
    
    // if the result is present (i.e. if a string was entered) call doSomething() on it
    result.ifPresent(string -> {
        doSomething(string);
    })
    

    这是一个带有一些周围环境的示例:

    Button showPopupButton = new Button("Show Popup");  
    Label displayLabel = new Label();
    
    showPopupButton.setOnAction(e -> {
        TextInputDialog dialog = new TextInputDialog();
        dialog.setTitle("Set Label Text");
        dialog.showAndWait().ifPresent(string -> label.setText(string));
    })
    

    按下按钮时,会出现一个弹出窗口。如果您输入一个字符串,Label 将显示该字符串。如果您通过单击“x”按钮将其关闭,则不会发生任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2012-09-25
      相关资源
      最近更新 更多