Diya
Diya

Reputation: 147

JCombobox loses its focus on pressing ENTER KEY

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

Answers (1)

StanislavL
StanislavL

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

Related Questions