我正在使用String数组来填充包含项目的组合框。选择一个项目并按下按钮后,我希望它从组合框中删除该项目。我的尝试是首先从String数组中删除所选项,从组合框中删除所有项并使用String数组重新填充它。
选择是String数组,cboChoice是组合框,strChoice是被删除的项目
for(int i = 0; i < choice.length; i++) {
if(choice[i].equals(strChoice)) {
choice[i] = null;
cboChoice.removeAllItems();
cboChoice.addItem(choice);
}
}
据我所知,我不知道是否有更简单的方法可以做到这一点,但我似乎无法让它发挥作用。
答案 0 :(得分:0)
如果您查看jComboBox Javadoc,您会看到
removeItem(Object anObject) 从项目列表中删除项目。
只需调用它即可删除不再需要的对象。
你提出的代码有点工作(虽然我不确定jComboBox会对null值做什么),但效率不高。
答案 1 :(得分:0)
由于您有一个String数组和一个JComboBox,它们具有相同顺序的相同项目,您可以使用JComboBox.getSelectedIndex()
检索所选项目的索引位置并从JComboBox中删除,并且您可以使用重新阵列。
作为一个建议,我会让你的String数组成为一个ArrayList,它是一个更智能的&#34;动态数组,可以与JComboBox保持同步。另外,在从JComboBox中删除之前,请确保先从数组中删除,否则所选索引可能会发生变化。
ArrayList声明如下所示:
ArrayList<String> choice = new ArrayList<>();
将您的内容添加到此列表中,如下所示:
choice.add(yourChoice);
删除项目如下:
if (cboChoice.getSelectedIndex() > -1) {
choice.remove(cboChoice.getSelectedIndex());
cboChoice.getSelectedIndex();
}
希望这会有所帮助...另外,一旦你理解了它是如何工作的,我建议你研究一下ComboBoxModel。某些摆动控件具有模型对象,您可以使用它们来添加/删除/修改内容,而无需引用实际控件。
答案 2 :(得分:0)
此代码有效,但仍有一个问题;您无法删除列表中的最后一项。要解决此问题,您可以在删除步骤中忽略的列表中添加一个元素。我使用了&#34;&#34;在过去的清单开头。
另外我要指出的是,JComboBox的大多数示例都显示了使用字符串,但您可以在框中放置所需的任何类型的Object。框中的项目将显示Object.toString()。在许多情况下,获取所需实例比根据从ComboBox获取的信息在列表中查找更有用和更直接。
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by bday on 4/22/15.<br>
* <br>
* ItemRemovingComboBox will do something useful I'm sure
*/
public class ItemRemovingComboBox {
private final JFrame frame = new JFrame();
private final List<String> strings = new ArrayList<String>();
private final JComboBox cb;
private final ItemListener itemListener;
public ItemRemovingComboBox()
{
String[] testItems = new String[] {"one", "two", "three"};
strings.addAll(Arrays.asList(testItems));
cb = new JComboBox(testItems);
frame.add(cb);
frame.setSize(200, 200);
frame.setVisible(true);
itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
if (itemEvent.getStateChange() == ItemEvent.SELECTED) {
String item = (String) itemEvent.getItem();
System.out.println("Item: " + item + " removed from list");
removeItem(item);
}
}
};
cb.addItemListener(itemListener);
}
private void removeItem(String item) {
//this step is required to keep from calling back to the listener with new selection when item is removed
cb.removeItemListener(itemListener);
strings.remove(item);
cb.removeItem(item);
cb.addItemListener(itemListener); //okay now we what to know about changes again
}
public static void main(String[] args) {
new ItemRemovingComboBox();
}
}