Диалоговое окно подтверждения при закрытии вкладки

Я новичок в JavaFX. Я хочу создать Listener, который вызывает диалоговое окно вопроса, когда пользователь закрывает вкладку в TabPane. До сих пор мне удавалось динамически создавать вкладки и добавлять некоторые пользовательские настройки.

    tabAvLabel = new Label(ss);

    tabPane.getTabs().add(0, tab);  // Place the new tab always first
    tabPane.getSelectionModel().select(tab);    // Always show the new tab
    tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS); // Add close button to all new tabs

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


person user1285928    schedule 28.06.2013    source источник
comment
См. соответствующие вкладки, потребляемые в TabPane при закрытии по умолчанию, и результаты поиска диалоговое окно подтверждения.   -  person Uluk Biy    schedule 28.06.2013
comment
возможный дубликат вкладки, потребляемой в TabPane при закрытии по умолчанию   -  person jewelsea    schedule 29.06.2013


Ответы (4)


Вы можете попробовать onCloseRequest для класса Tab

tab.setOnCloseRequest(new EventHandler<Event>()
{
    @Override
    public void handle(Event arg0) 
    {
        //your code
    }
});
person VagrantAI    schedule 06.08.2016

Попробуйте этот код:

tabAvLabel = new Label(ss);

tabPane.getTabs().add(0, tab);  // Place the new tab always first
tabPane.getSelectionModel().select(tab);    // Always show the new tab
tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS); // Add close button to all new tabs
tabPane.getOnClosed(), setOnClosed(new EventHandler<Event>(){
    @Override void handle(Event e){
        // What you have to do here
    }
})

Для получения дополнительной информации см. http://docs.oracle.com/javafx/2/api/javafx/scene/control/Tab.html#onClosedProperty

person PhilippeVienne    schedule 28.06.2013
comment
OP хочет событие TAB_ON_CLOSING, а не TAB_ON_CLOSED. И действительно, в JavaFX-8 есть событие onCloseRequest. - person Uluk Biy; 29.06.2013
comment
Поэтому рассмотрите этот ответ на форумах Oracle: forums.oracle.com/thread/2327254 - person PhilippeVienne; 29.06.2013

Я взломал аналогичную поддержку, которую вы имеете в поддержке jdk8, в 2.2 (https://git.eclipse.org/c/efxclipse/org.eclipse.efxclipse.git/tree/bundles/runtime/org.eclipse.fx.e4.controls.fx2/src/org/eclipse/fx/e4/controls/fx2)

person tomsontom    schedule 29.06.2013

Ответ @VagrantAI может сработать. Но вы должны добавить следующие коды в функцию нажатия кнопки «ОК»:

stage.fireEvent(
            new WindowEvent(
                    stage,
                    WindowEvent.WINDOW_CLOSE_REQUEST
            )
);

Хотя проблема этого подхода заключается в том, что событие запускается, когда вы нажимаете «X», чтобы закрыть окно. Обычно это не должно быть целью.

Чтобы решить эту проблему, добавьте флаг (или статическую переменную) в класс, загружающий окно. Поэтому каждый раз, когда окно загружается, устанавливайте флаг в false. Когда окно закрыто, устанавливайте флаг только при нажатии кнопки «ОК». Затем вы можете выполнить свои действия в отношении значения этого флага.

person John_Chen    schedule 04.08.2017