gpt4 book ai didi

java - 在选择发生之前验证 JList

转载 作者:行者123 更新时间:2023-12-04 07:02:51 28 4
gpt4 key购买 nike

目前,我有一个 JList 监听列表选择监听器。

private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
// When the user release the mouse button and completes the selection,
// getValueIsAdjusting() becomes false
if (evt.getValueIsAdjusting()) {
/*
In certain situation, I may want to prevent user from selecting other
than current selection. How can I do so?
*/
}
}

在某些情况下,我可能希望阻止用户选择当前选择以外的选项。我怎么能这样做?

当我收到 ListSelectionEvent 时似乎为时已晚。但是,如果我想在 ListSelectionEvent 发生之前这样做,我不知道该用户正在尝试选择其他。

这是其中之一。

JList 包含项目名称列表。
所以,每当用户选择新的列表项时,我们需要从当前项目中打开 View ,并显示新项目。
但是,当前项目可能尚未保存。
因此,如果当前项目尚未保存,我们将要求用户确认,“保存项目?” (是,否,取消)
当用户选择取消时,这意味着他要取消他的“选择到另一个项目”操作。他想坚持当前的 JList 选择。
我们将在 jList1ValueChanged 事件句柄中弹出确认对话框。
但是当我们试图坚持当前的 JList 选择时,已经太晚了。

最佳答案

对于相同的工作流用例,我已按如下方式实现了这一点。虽然它对我来说足够有效,但我确实希望有一种更简单、更优雅的方法,可以在继续之前否决选择事件。如果我有时间调查并弄清楚我会重新发布,但它可能被列为投资返回不值得的情况(即自定义 Swing 类,直接处理较低级别的鼠标/键盘事件等)。无论如何,我目前正在做的是保存最后一个好的“已验证”选择,如果用户取消 future 的选择,则恢复到它。诚然,这不是最漂亮的解决方案,但它有效:

// save the last good (i.e. validated) selection:
private ProjectClass lastSelectedProj;

// listing of available projects:
private JList list;

// true if current selected project has been modified without saving:
private boolean dirty;

list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {

if (evt.getValueIsAdjusting()) return;

// first validate this selection, and give the user a chance to cancel.
// e.g. if selected project is dirty show save: yes/no/cancel dialog.
if (dirty) {
int choice = JOptionPane.showConfirmDialog(this,
"Save changes?",
"Unsaved changes",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);

// if the user cancels the selection event revert to previous selection:
if (choice == JOptionPane.CANCEL_OPTION) {
dirty = false; // don't cause yet another prompt when reverting selection
list.setSelectedValue(lastSelectedProj, true);
dirty = true; // restore dirty state. not elegant, but it works.
return;
} else {
// handle YES and NO options
dirty = false;
}
}

// on a validated selection event:
lastSelectedProj = list.getSelectedValue();

// proceed to update views for the newly selected project...
}
}

关于java - 在选择发生之前验证 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556349/

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