在JavaFX对话框中获取两个以上的输入

我尝试构建文本对话框,用户输入事件名称,事件大小和选定的场地。

在此处输入图像描述

我的问题是如何收集输入; 到目前为止我做了什么:

eventName = new TextField(); eventSize = new TextField(); ObservableList options = FXCollections.observableArrayList(model.getVenuesList()); VeunueList = new ComboBox(options); 

我创建了一个封装所有输入的类:

 public class MyResult { String eventname; String eventsize; Venue venue; } 

我将变量定义为Myresult类的Myresult

 private Dialog dialog ; private Optional EventInput; 

问题是如何在结果转换器中写入return语句; 它给了我错误:

 dialog.setResultConverter(dialogButton -> { if (dialogButton == submit) { return new MyResult(eventName.getText(),eventSize.getText(),VeunueList.getValue()) } return null; }); EventInput = dialog.showAndWait(); 

目前尚不清楚你的片段出错的地方,但是为了调用setResultConverter()而获得正确的类型有时会出现问题。 下面的示例演示了一个Dialog ,它从TextFieldDatePickerComboBox收集输入。 在ComboBoxComboBox的选择来自enum ,并且使用enum的隐式values()方法构造相应的ComboBox模型。 resultConverter属性的Callback返回一个新的Results实例,该实例具有各种视图组件的当前值。 Optional显示ifPresent()值。 可以在此处和教程中找到一些相关示例,Java SE 8u40中的JavaFX改进

图片

控制台: Name 2017-05-24 Elsewhere

 import java.time.LocalDate; import java.util.Optional; import javafx.application.Application; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; import javafx.scene.control.DatePicker; import javafx.scene.control.Dialog; import javafx.scene.control.DialogPane; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; /** * @see http://stackoverflow.com/q/44147595/230513 * @see http://www.javaworld.com/article/2991463/ */ public class DialogTest extends Application { @Override public void start(Stage primaryStage) { Dialog dialog = new Dialog<>(); dialog.setTitle("Dialog Test"); dialog.setHeaderText("Please specify…"); DialogPane dialogPane = dialog.getDialogPane(); dialogPane.getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); TextField textField = new TextField("Name"); DatePicker datePicker = new DatePicker(LocalDate.now()); ObservableList options = FXCollections.observableArrayList(Venue.values()); ComboBox comboBox = new ComboBox<>(options); comboBox.getSelectionModel().selectFirst(); dialogPane.setContent(new VBox(8, textField, datePicker, comboBox)); Platform.runLater(textField::requestFocus); dialog.setResultConverter((ButtonType button) -> { if (button == ButtonType.OK) { return new Results(textField.getText(), datePicker.getValue(), comboBox.getValue()); } return null; }); Optional optionalResult = dialog.showAndWait(); optionalResult.ifPresent((Results results) -> { System.out.println( results.text + " " + results.date + " " + results.venue); }); } private static enum Venue {Here, There, Elsewhere} private static class Results { String text; LocalDate date; Venue venue; public Results(String name, LocalDate date, Venue venue) { this.text = name; this.date = date; this.venue = venue; } } public static void main(String[] args) { launch(args); } }