JAVAFX选项卡onCloseRequest使用tabPane

时间:2017-03-18 15:44:50

标签: java javafx

tab.setOnCloseRequest(e -> {
                if (getEditorForTextArea(getSelectedTextArea()) != null){
                    selectedTextArea = getSelectedTextArea();
                    selectedEditor = getEditorForTextArea(selectedTextArea);
                    if (selectedEditor.isModified()){
                        if (DialogBox.newSaveConfirmationBox(tab.getText()))
                            saveFile();
                        else e.consume();
                    }
                }
            }
    );

这是我的代码。我想在saveConfirmationBox时弹出selectedEditor.isModified()。然后出现了问题。我打开了两个标签,一个修改过,另一个未经修改。当我选择未修改的选项卡时,我可以使用X按钮关闭修改后的选项卡而不进行任何确认。另一方面,当我在修改后的选项卡上试图关闭未经修改的选项卡时,显示确认框。

以下是我如何获得selectedEditor

private Editor getEditorForTextArea(TextArea textArea) {
    Iterator<Editor> editorIterator = editorVector.iterator();
    while (editorIterator.hasNext()) {
        Editor editor = editorIterator.next();
        if (textArea == editor.getRoot())
            return editor;
    }
    return null;
}

@Nullable
private TextArea getSelectedTextArea() {
    SingleSelectionModel<Tab> selectionModel = tabPane.getSelectionModel();
    if (selectionModel.isEmpty())   return null;
    Tab selectedTab = selectionModel.getSelectedItem();
    return (TextArea)selectedTab.getContent();
}

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

我认为这是完全预期的行为,因为您在TextArea方法中获得了{{1>} 当前选定的标签。因此,它会检查当前selecetd选项卡的getSelectedTextArea()您要关闭的选项卡。

您应该将Editor修改为:

setOnCloseRequest

方法tab.setOnCloseRequest(e -> { if (getEditorForTextArea(getTextAreaFor(tab)) != null){ textArea = getTextAreaFor(tab); editor = getEditorForTextArea(textArea); if (editor.isModified()){ if (DialogBox.newSaveConfirmationBox(tab.getText())) saveFile(); else e.consume(); } } } ); 将是

getTextAreaFor(tab)

答案 1 :(得分:0)

谢谢@Vyacheslav Zhukov,这是我的解决方案:

tab.setOnCloseRequest(e -> {
                if (getEditorForTextArea(getTextAreaForTab(tab)) != null){
                    Editor editorToClose = getEditorForTextArea(getTextAreaForTab(tab));
                    if (editorToClose.isModified()){
                        if (DialogBox.newSaveConfirmationBox(tab.getText()))
                            saveFile();
                        else e.consume();
                    }
                }
            }
    );

private TextArea getTextAreaForTab(Tab tab) {
    return (TextArea)tab.getContent();
//PS it won't be null lol nothing to check here :P
}