Правильный способ открыть новый диалог из диалога - PullRequest
0 голосов
/ 08 октября 2018

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");
        }
    }   
}

Для целей тестирования яжестко закодированные поддельные данные в список, но после этого этот список будет удален и передан конструктором.

Теперь мне нужно включить кнопку в этом диалоге, которая при нажатии будет сохранять первый диалог активным,откройте новый диалог, который позволит пользователю вводить новые данные.Таким образом, этот новый диалог будет содержать textField, DatePicker и кнопку отправки.После отправки новые данные добавляются в список и отображаются в первом диалоге.

Проблема в том, что я не знаю, как создать эту пользовательскую кнопку.Нужно ли создавать пользовательский ButtonType и добавлять его в диалог так же, как я это сделал?Если да, то какой способ создания пользовательского типа ButtonType является правильным?

Или мне нужно переопределить один из createButtonBar(), createButton() и createDetailsButton() из DialogPane?

Я не совсем понимаю, как JavaFX обрабатывает диалоги, и не могу понять, какой правильный способ открыть новый диалог из существующего диалога.

1 Ответ

0 голосов
/ 08 октября 2018

Вы на правильном пути.Как объясняется в документации Dialog и Документация DialogPane , вы действительно хотите создать собственный ButtonType, просто используя конструкторы ButtonType.

Что касается открытия нового Dialog,процедура такая же, как и для любого диалога: вызов initOwner с родительским окном.Окно диалога можно получить из его DialogPane:

Dialog<SomeType> secondDialog = new Dialog<>();
secondDialog.initOwner(
    firstDialog.getDialogPane().getScene().getWindow());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...