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键时,焦点移动到按钮。
答案 0 :(得分:3)
listItemsCombo.setEnabled(true);
表示你在某处禁用它,因此焦点转到下一个启用的组件(在你的情况下为按钮)。
猜猜您是否禁用了组合框以防止操作,但最好在侦听器中定义标记并跳过处理或让侦听器处理用户的选择,直到nexw组合框模型准备就绪。