gpt4 book ai didi

java - 如何检测用户何时真正选择了 ComboBox 的菜单项?

转载 作者:行者123 更新时间:2023-12-02 10:19:18 26 4
gpt4 key购买 nike

我目前面临的情况是,如果用户单击我的组合框并用按键移动选择,则选择监听器将继续被调用,尽管出于所有目的,用户仍然没有真正做出选择。

如何在组合框中区分这些“中间”选择和正确的最终用户选择?

我尝试查看诸如 isPopupVisible 之类的变量,甚至尝试使用 PopupMenuListener 但它们似乎并没有真正的帮助。

谢谢

编辑:违规代码示例:

public class Main extends JFrame {    
public Main() {
setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));

JComboBox<String> comboBox = new JComboBox<>();
comboBox.setModel(new DefaultComboBoxModel<>(new String[] { "a", "b", "c" }));
comboBox.addItemListener(e -> {
System.out.println(e.getItem());
});
add(comboBox);
}
}

最佳答案

I need something that only fires when the user actually clicks and the popup disappears.

comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

设置上述属性,以便仅在释放鼠标或按 Enter 键时生成事件。

注意:

  1. 如果您使用ActionListner,则在选择某个项目时始终会生成事件。

  2. 如果您使用 ItemListener,则仅当您更改先前选择的所选项目时才会生成事件。

编辑:

您可以使用以下方法禁用按键选择:

JComboBox comboBox = new JComboBox( model )
{
@Override
public boolean selectWithKeyChar(char keyChar)
{
return false;
}
};

编辑2:

或者也许作为一种黑客,您可以在进行键搜索时禁用监听器。代码可能类似于:

JComboBox comboBox = new JComboBox( model )
{
@Override
public boolean selectWithKeyChar(char keyChar)
{
// remove the listener here

// This will cause the selected index to change
Boolean result = super.selectWithKeyChar(keyChar);

// add the listener back here

return result;
}
};

关于java - 如何检测用户何时真正选择了 ComboBox 的菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54451917/

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