gpt4 book ai didi

JAVAFX tab onCloseRequest 消耗 tabPane

转载 作者:行者123 更新时间:2023-11-30 06:50:34 27 4
gpt4 key购买 nike

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

这是我的代码。我想在 selectedEditor.isModified() 时弹出一个 saveConfirmationBox 。然后出现了问题。我打开了两个选项卡,一个已修改,另一个未修改。当我选择未修改的选项卡时,我可以使用 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();
}

提前感谢您的帮助:)

最佳答案

我认为这完全是预期的行为,因为您在 getSelectedTextArea() 方法中获取了当前选定的选项卡的TextArea。因此它会检查当前 selecetd 选项卡的 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)将是

private TextArea getTextAreaFor(Tab tab) {
return (TextArea)tab.getContent(); // with checks etc...
}

关于JAVAFX tab onCloseRequest 消耗 tabPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com