有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

I一些由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");
        }
    }   
}

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

现在,我需要在这个对话框中包含一个按钮,当单击该按钮时,第一个对话框将保持活动状态,打开一个新对话框,允许用户输入新数据。因此,这个新对话框将包含一个文本字段、一个日期选择器和一个提交按钮。提交后,新数据将添加到列表中并显示在第一个对话框中

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

或者我需要覆盖createButtonBar()createButton()createDetailsButton()DialogPane之一吗

我对JavaFX如何处理对话框感到困惑,并且不知道从现有对话框打开新对话框的正确方法是什么


共 (1) 个答案

  1. # 1 楼答案

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

    至于打开新对话框,其过程与任何对话框相同:使用父窗口调用initOwner。对话框的窗口可以从其对话框窗格中获得:

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