如果对话框已打开,则用户无法导航

时间:2015-08-05 10:16:42

标签: popup javafx-8 dialog

如果对话打开并且用户想要打开另一个屏幕或任何他们需要先关闭对话然后导航,否则他们不能。

我正在进行javafx对话,但我无法弄清楚如何在不关闭当前对话的情况下限制用户不在其他地方导航。

代码:

final TextField templateTexBox = new TextField();

        final Label templateNameLabel = new Label("Template Name");
        final Label templateType = new Label("Type of Template");

        final CheckBox cb = new CheckBox("Set as Default Template");

        final ComboBox comboBox = new ComboBox();
        comboBox.getItems().addAll("Private", "Public");
        comboBox.setPromptText("Select Template Type");

        if (getViewModel().selectedTemplate().get() != null) {
            templateTexBox.setText(getViewModel().selectedTemplate().get().getPreference().getName());
            cb.setSelected(getViewModel().selectedTemplate().get().getDefaultTemplate()); 
            comboBox.setValue(getViewModel().selectedTemplate().get().getTemplateType()); 
        }

        final Stage stage = new Stage();

        stage.initModality(Modality.WINDOW_MODAL); 
        final Dialog dlg = new Dialog(stage, "Save Template");
        dlg.getStyleClass().add(Dialog.STYLE_CLASS_CROSS_PLATFORM);
        dlg.setResizable(false);
        dlg.setIconifiable(false);

        templateNameLabel.setWrapText(true);
        templateType.setWrapText(true);
        templateNameLabel.setPrefWidth(130.0);
        templateType.setPrefWidth(130.0);

        templateTexBox.setPromptText("Enter Text");
        templateTexBox.focusedProperty().addListener(new ChangeListener<Boolean>(){
            @Override
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {

                if(!newValue){                  
                    Optional<TemplatePreferences> templateOptional = getViewModel().getAllTemplates().stream().filter(template ->template.getPreference().getName().equalsIgnoreCase(templateTexBox.getText())).findAny();
                    if(!templateOptional.isPresent()){
                        cb.setSelected(false); 
                    }
                }
            } 

        });

        HBox tmpNameBox = new HBox(templateNameLabel, templateTexBox);
        HBox tmpTypeBox = new HBox(templateType, comboBox);
        HBox tmpDefaultBox = new HBox(cb);
        tmpNameBox.setPrefHeight(40.0);
        tmpTypeBox.setPrefHeight(40.0);

        VBox wrapperBox = new VBox( tmpNameBox, tmpTypeBox, tmpDefaultBox );

        dlg.setContent(wrapperBox);
        dlg.getActions().addAll(Dialog.ACTION_OK, Dialog.ACTION_CANCEL);

        Action action = dlg.show();

        if (action == Dialog.ACTION_OK) {

            if (StringUtils.isNotBlank(templateTexBox.getText()) && comboBox.getValue() != null) {
                //saveTemplateData(templateTexBox.getText(), String.valueOf(comboBox.getValue()), cb.isSelected());
                saveFilterTemplateData(templateTexBox.getText(), String.valueOf(comboBox.getValue()), cb.isSelected()); 
            } else {

                Dialogs.create().title("Missing Required Data")
                        .message("Please populate both Template Name and Template Type")
                        .styleClass(Dialog.STYLE_CLASS_CROSS_PLATFORM).showError();
                saveTemplate();
            }

        }

**我正在使用这个课程

import org.controlsfx.dialog.Dialogs;

我也尝试过使用javafx对话框并且像我这样使用我的代码但是我无法达到我想要的效果。

1 个答案:

答案 0 :(得分:0)

致电

dlg.initModality(Modality.NONE);

显示对话框(see docs

之前