【问题标题】:Swing: detect Enter in JComboBox?Swing:检测JComboBox中的Enter?
【发布时间】:2011-02-11 23:08:43
【问题描述】:

我尝试在 JComboBox 上使用 getInputMap() + getActionMap() 似乎没有效果。

我已经在 J​​ComboBox 上尝试了 addActionListener() / addItemListener(),但我似乎无法区分选择更改与按下 Return/Enter 键的人。

有什么建议吗?在我的应用程序中,我希望 Return/Enter 键比选择更强大,它是一个选择 + 应用操作。


这是我设置键绑定的代码。当组件是JList 时它可以正常工作(例如调用note("hit ENTER")),但当组件是JComboBox 时它不起作用。

private void setupApplyProfile(final JComponent component, final MyComboBoxModel mcbm)
{   
    String enterAction = "applyItem";
    KeyStroke enterKey = KeyStroke.getKeyStroke("ENTER");
    component.getInputMap().put(enterKey, enterAction);
    component.getActionMap().put(enterAction, new AbstractAction()
    {
        @Override public void actionPerformed(ActionEvent e) {
            note("hit ENTER");
            applySelectedProfile(mcbm);
        }
    });
}

【问题讨论】:

  • 你是如何使用 getActionMap() 的?

标签: java swing jcombobox


【解决方案1】:

啊哈,这似乎有效:当我在组合框字段中按 Enter 键时,note("cb editor action") 被调用。

        comboBox.getEditor().addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent arg0) {
                note("cb editor action");
            }               
        });

【讨论】:

  • 不错,但不适用于 Substance :(,应将侦听器添加到组合框本身。
【解决方案2】:

在我的应用程序中,我希望 Return/Enter 键比选择更强大,它是一个选择 + 应用操作。

如果我理解您的问题,您可以使用以下内容:

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

只有当您使用鼠标或回车键从下拉列表中选择一个项目时,才会触发 ActionEvent 和 ItemEvents。如果您使用向上/向下箭头键导航下拉列表,则不会触发 eEvents。

【讨论】:

  • 嗯。这几乎就是我想要的。问题是,我想创建一个由 Return/Enter 键触发的事件,而不是通过鼠标选择。换句话说,您从列表中选择一个项目(或输入一个),然后通过按 Return/Enter(或在我的对话框中点击“应用”按钮)应用该项目
  • 我想我还是不明白这个问题。您是在谈论从下拉菜单中选择一个项目吗? (因为如果鼠标单击和 Enter 键的工作方式不同,那将是一个糟糕的 UI)或者您是在谈论当焦点位于组合框上并且下拉关闭时使用 enter 键?如果是这种情况,那么您的组合框是否可编辑?是否专注于用作编辑器的文本字段?发布您的 SSCCE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2011-10-29
  • 2012-01-29
相关资源
最近更新 更多