gpt4 book ai didi

java - JComboBox在getItemCount()>0时显示空白区域

转载 作者:行者123 更新时间:2023-11-30 07:22:35 24 4
gpt4 key购买 nike

我使用 JcomboBox 作为建议框,当用户输入时,它会检查匹配项并显示建议。下面是我创建 JComboBox 的方法:

    Vector<String> popUpVector = new Vector<String>();
JComboBox jcb = new JComboBox(popUpVector);

每次 Key Listener 捕获事件时,我都会这样做

    popUpVector.clear();
jcb.hidhPopUp();
for(String s : database){
popUpVector.add(s);
}
jcb.showPopUp();

只要我不从下拉列表中选择项目,它就会工作。但是,一旦我从下拉列表中选择项目,之后 dropDown 将显示空白,我检查了 popUpVector,虽然它不是空的,但我认为它与选择有关,所以我从 actionListener 中解开它,它没有有帮助。

谁能帮我解决这个问题,非常感谢!

最佳答案

Vector 传递给 JComboBox 构造函数将根据源代码确实使用该 vector 来支持底层模型:

public JComboBox(Vector<?> items) {
super();
setModel(new DefaultComboBoxModel(items));
init();
}

public DefaultComboBoxModel(Vector<?> v) {
objects = v;

if ( getSize() > 0 ) {
selectedObject = getElementAt( 0 );
}
}

意思是如果你改变 vector 的内容,你也会改变你的模型的内容。但是,对模型进行更改需要触发正确的事件以通知 View 有关更改。由于 vector 不触发任何事件,DefaultComboBoxModel 无法知道 vector 的内容已更改。所以我认为 DefaultComboBoxModel 构造函数应该简单地从 vector 中获取元素并存储那些直接存储 vector 的 iso。

现在要解决您的问题:不要将您的值存储在 Vector 中,而是使用 DefaultComboBoxModel 并使用该模型上的可用 API 进行更改。使用 API 将确保模型触发正确的更改。例如,参见 addElement 方法的实现:

public void addElement(Object anObject) {
objects.addElement(anObject);
fireIntervalAdded(this,objects.size()-1, objects.size()-1);
if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
setSelectedItem( anObject );
}
}

关于java - JComboBox在getItemCount()>0时显示空白区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12595391/

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