如何避免使用此机器人来触发我的JComboBox?

时间:2015-01-02 15:32:07

标签: java jcombobox awtrobot

我正在使用JComboBox为所选项加载表。 组合框是可编辑的,我正在使用autoCompleteDecorator。 我遇到的问题是我的所有代码都会在搜索时触发 组合框而不是等待VK_ENTER。所以,我不得不使用一个变量 存储字符串"输入"敲击回车键时。一切正常 好的(住在一起但工作)除了我必须打击输入 键两次执行提交所选项目。所以而不是最终用户 不得不两次敲击钥匙,我添加了一个机器人。

static JComboBox<String> drivers = new JComboBox<String>();
drivers.setEditable(true);
AutoCompleteDecorator.decorate(drivers);

drivers.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent kEvent) {
        if (kEvent.getKeyChar() == KeyEvent.VK_ENTER) {
            lastKey="enter";
            try{
                Robot myBot = new Robot();
                myBot.keyPress(KeyEvent.VK_ENTER);
            }catch (AWTException e){
                JOptionPane.showMessageDialog(frame, "Something has gone terribly wrong.","myBot Failure",JOptionPane.WARNING_MESSAGE);
                e.printStackTrace();
            }
        }
    }
});

所以有我的KeyListener,这是我的ActionListener:

drivers.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent eAction){
        if(lastKey=="enter" || !((eAction.getModifiers() & InputEvent.BUTTON1_MASK) == 0)){
            lastKey="";
            //Query the DB, load the table accordingly
            //And do a bunch of other stuff….
        }
    }
}

有没有办法让我一起消除对KeyListener的需求? 我想我想要完成的只是在Enter键上提交搜索 按或鼠标左键单击。

1 个答案:

答案 0 :(得分:0)

不是使用KeyListener来监控对编辑器的更改,而是将ActionListener附加到编辑器或组合框,它将以独立于平台的方式执行相同的操作