JCombobox失去了对按ENTER键的关注

时间:2015-02-24 12:26:19

标签: java swing

UI由JCombobox和Button组成。使用DefaultComboModel将元素添加到jcomboBox。按Enter键我使用SwingWorker的doInBackGround检索100k条目,并使用done()在UI中显示它。执行此操作时,焦点移动到按钮(P.S-I从不设置焦点)。我哪里错了?

   @Override
    public void keyPressed(final KeyEvent e) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
             if (e.getKeyCode()==KeyEvent.VK_ENTER)
                {
                    addMessagePanel();
                    new ImportDetails().execute();

                }
             }

   public class ImportDetails extends SwingWorker<List<ListItem> , Void>
    {
    @Override
    protected List<ListItem> doInBackground() throws Exception {
        customizedfilteredList = optionPanel.getFilteredList(listItems, userTypedString);
        setCountInLabel(listItemsCombo.getItemCount(), listItems.size());
        return customizedfilteredList;
    }
    @Override
    protected void done() {
        try 
        {
            List<ListItem> filterList = get();
            if(filterList.size()==0)
                return;
            if(filterList.size() == 1 &&  filterList.get(0).getLabel().equals(userTypedString))
            {
                listItemsCombo.setEnabled(true);
                defaultComboModel = new DefaultComboBoxModel<>(filterList.toArray());
                setComboModel(defaultComboModel, userTypedString, false);
                setCountInLabel(defaultComboModel.getSize(), listItems.size());
                /*selectedItem = filterList.get(0);
                itemChanged();*/
                messagePanel.remove(progressLabel);
                changeLayout(messagePanel);
            }

按下Enter键时,焦点移动到按钮。

1 个答案:

答案 0 :(得分:3)

listItemsCombo.setEnabled(true);

表示你在某处禁用它,因此焦点转到下一个启用的组件(在你的情况下为按钮)。

猜猜您是否禁用了组合框以防止操作,但最好在侦听器中定义标记并跳过处理或让侦听器处理用户的选择,直到nexw组合框模型准备就绪。