Reputation: 147
UI consists of a JCombobox and a Button. Elements are added to the jcomboBox using DefaultComboModel.Once Enter is Pressed I retrieve 100k of entries using SwingWorker's doInBackGround and display it in the UI using done(). When this action is performed , the focus moves to the Button(P.S-I never set the focus). Where I am going wrong?
@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);
}
When Enter is pressed the focus moves to the button.
Upvotes: 0
Views: 417
Reputation: 57421
listItemsCombo.setEnabled(true);
means you make it disabled somewhere so focus goes to next enabled component (the button in your case).
Guess you disable the combobox to prevent action but it's better to define flag in your listener and skip processing or let listener process user's selection till the nexw combobox model is ready.
Upvotes: 3