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 нажатие фокусировки переходит к кнопке.
Спасибо за идею. Но Combobox должен быть отключен, пока все записи не будут загружены на него. Есть ли другой способ предотвратить переход фокуса к следующему jComponent? – Diya
Не отключайте его. Сделайте фиктивную модель только с одним серым элементом «Загрузка ...». Замените модель манекеном перед началом загрузки и замените его на новую модель после новой модели. – StanislavL