2015-02-24 2 views
0

UI состоит из JCombobox и кнопки. Элементы добавляются в jcomboBox, используя DefaultComboModel.Once Enter is Pressed Я извлекаю 100 тыс. Записей с помощью doInBackGround из SwingWorker и отображаю его в пользовательском интерфейсе с помощью done(). Когда это действие выполняется, фокус переходит к кнопке (P.S-I никогда не устанавливал фокус). Где я ошибаюсь?JCombobox теряет фокус при нажатии ENTER KEY

@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 нажатие фокусировки переходит к кнопке.

ответ

3
listItemsCombo.setEnabled(true); 

означает, что вы отключили его, так что фокус переходит к следующему включенному компоненту (кнопка в вашем случае).

Угадайте, что вы отключите комбобокс, чтобы предотвратить действие, но лучше определить флаг в вашем слушателе и пропустить обработку или позволить пользователю прослушивать процесс выбора пользователя до тех пор, пока не будет готова модель combobox nexw.

+0

Спасибо за идею. Но Combobox должен быть отключен, пока все записи не будут загружены на него. Есть ли другой способ предотвратить переход фокуса к следующему jComponent? – Diya

+1

Не отключайте его. Сделайте фиктивную модель только с одним серым элементом «Загрузка ...». Замените модель манекеном перед началом загрузки и замените его на новую модель после новой модели. – StanislavL

Смежные вопросы