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 楼答案
你在正确的轨道上。正如Dialog documentation和DialogPane documentation所解释的,您确实希望通过使用ButtonType构造函数来创建自定义ButtonType
至于打开新对话框,其过程与任何对话框相同:使用父窗口调用initOwner。对话框的窗口可以从其对话框窗格中获得: