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();
}
提前感谢您的帮助:)
答案 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
}