Java 我如何避免使用这个机器人触发我的JComboBox?

Java 我如何避免使用这个机器人触发我的JComboBox?,java,jcombobox,awtrobot,Java,Jcombobox,Awtrobot,我正在使用JComboBox为所选项目加载一个表。 组合框是可编辑的,我正在使用自动完成编辑器。 我遇到的问题是,我所有的代码都会在搜索 组合框,而不是等待VK_输入。所以,我不得不使用一个变量 在按下enter键时存储字符串“enter”。一切正常 好的(虽然在一起,但仍在工作),除了我必须敲入入口 键两次以执行提交所选项目。。所以不是最终用户 我敲了两下钥匙,加了一个机器人 static JComboBox<String> drivers = new JComboBox<S

我正在使用JComboBox为所选项目加载一个表。 组合框是可编辑的,我正在使用自动完成编辑器。 我遇到的问题是,我所有的代码都会在搜索 组合框,而不是等待VK_输入。所以,我不得不使用一个变量 在按下enter键时存储字符串“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的需求? 我想我想要完成的只是在Enter键上提交搜索
按下或鼠标左键单击。

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

您应该检查如何正确比较字符串,并且应该考虑保存常量
KeyEvent.VK\u将
输入为
lastKey
,而不是字符串(以防无法避开您的机器人)。谢谢,@Tom,将lastKey==更改为lastKey.equals()…从我所知道的情况来看,在ListComponent的按键事件中,它只是将SelectedItem放入EditorComponent,第二次输入(由机器人执行)触发ActionEvent?很抱歉我的无知。不要使用KeyListener监视对编辑器的更改,而是将ActionListener附加到它,这将以更独立于平台的方式完成相同的工作谢谢@MadProgrammer我明天回到办公室时会尝试一下。
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….
        }
    }
}