gpt4 book ai didi

java - JCombobox 在按下 ENTER 键后失去焦点

转载 作者:行者123 更新时间:2023-12-01 22:26:23 25 4
gpt4 key购买 nike

UI 由 JCombobox 和 Button 组成。使用 DefaultComboModel 将元素添加到 jcomboBox。按下 Enter 后,我使用 SwingWorker 的 doInBackGround 检索 100k 条目,并使用 did() 将其显示在 UI 中。执行此操作时,焦点移动到按钮(P.S-我从未设置焦点)。我哪里出错了?

   @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 后,焦点将移至该按钮。

最佳答案

listItemsCombo.setEnabled(true);

意味着您将其在某处禁用,以便焦点转到下一个启用的组件(您的情况下的按钮)。

猜测您禁用组合框以防止操作,但最好在监听器中定义标志并跳过处理或让监听器处理用户的选择,直到下一个组合框模型准备就绪。

关于java - JCombobox 在按下 ENTER 键后失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28695774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com