如何从Java中的组合框中删除特定项?

时间:2015-04-22 12:46:17

标签: java arrays combobox jcombobox

我正在使用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);
        }
    }

据我所知,我不知道是否有更简单的方法可以做到这一点,但我似乎无法让它发挥作用。

3 个答案:

答案 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();
    }
}