我用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如何处理对话框感到困惑,无法弄清楚哪种方法是从现有对话框中打开新对话框的正确方法。
答案 0 :(得分:0)
您处在正确的轨道上。正如Dialog documentation和DialogPane documentation所解释的那样,您确实想通过使用ButtonType构造函数来创建自定义ButtonType。
关于打开新对话框的过程与任何对话框相同:使用父窗口调用initOwner。对话框的窗口可以从其DialogPane获取:
Dialog<SomeType> secondDialog = new Dialog<>();
secondDialog.initOwner(
firstDialog.getDialogPane().getScene().getWindow());