从对话框中打开新对话框的正确方法

时间:2018-10-08 13:38:51

标签: java javafx

我用Dialog显示了一些数据,这是数据类:

public class Data
{
    private StringProperty title;
    private ObjectProperty<LocalDate> date;

    Data(String title, LocalDate date)
    {
        this.title = title;
        this.date = date;
    }

    public String getTitle() {return titleProperty.get();}

    public void setTitle(String value) {titleProperty.set(value)}

    public StringProperty titleProperty() {return title}

    public LocalDate getDate() {return dateProperty.get();}

    public void setDate(LocalDate value) {dateProperty.set(value)}

    public ObjectProperty<LocalDate> dateProperty() {return date}
}

这是Dialog

public class CustomDialog extends Dialog<void>
{
    private ArrayList<Data> list = new ArrayList<>();
    private VBox listDisplay = new VBox();

    CustomDialog()
    {
        this.getDialogPane().getButtonTypes().add(ButtonType.OK);

        if(!list.isEmpty())
        {
            this.getDialogPane.setContent(listDisplay);
            for(Data data : list)
            {    
                VBox listItem = new Vbox();
                listItem.getChildren().add(new Label("Title : " + data.getTitle());
                listItem.getChildren().add(new Label("Date : " + data.getDate());
                listItem.getChildren().add(new Separator());

                listDisplay.getChildren().add(listItem);
            }
        } else {
             this.getDialogPane.setContent(new Label("no data");
        }
    }   
}

出于测试目的,我将伪造的数据硬编码到列表中,但是一旦完成,该列表将被构造函数删除并传递。

现在,我需要在该对话框上添加一个按钮,单击该按钮将使第一个对话框保持活动状态,并打开一个新对话框,该对话框将允许用户输入新数据。因此,此新对话框将包含一个textField,一个DatePicker和一个Submit按钮。提交后,新数据将添加到列表中并显示在第一个对话框中。

问题是我不知道如何创建此自定义按钮。我是否需要创建自定义ButtonType并将其添加到对话框中,方法与我相同?如果是这样,那么创建自定义ButtonType的正确方法是什么?

还是我需要覆盖createButtonBar()中的createButton()createDetailsButton()DialogPane中的一个?

我对JavaFX如何处理对话框感到困惑,无法弄清楚哪种方法是从现有对话框中打开新对话框的正确方法。

1 个答案:

答案 0 :(得分:0)

您处在正确的轨道上。正如Dialog documentationDialogPane documentation所解释的那样,您确实想通过使用ButtonType构造函数来创建自定义ButtonType。

关于打开新对话框的过程与任何对话框相同:使用父窗口调用initOwner。对话框的窗口可以从其DialogPane获取:

Dialog<SomeType> secondDialog = new Dialog<>();
secondDialog.initOwner(
    firstDialog.getDialogPane().getScene().getWindow());