如何从 Java 的组合框中删除特定项目?
Posted
技术标签:
【中文标题】如何从 Java 的组合框中删除特定项目?【英文标题】:How would I remove a specific item from a combo box in Java? 【发布时间】:2015-04-22 12:46:16 【问题描述】:我正在使用字符串数组来填充带有项目的组合框。在按下按钮选择并提交一个项目后,我希望它从组合框中删除该项目。我的尝试是先从字符串数组中删除选定的项目,然后从组合框中删除所有项目,然后用字符串数组重新填充它。
choice 是字符串数组,cboChoice 是组合框,strChoice 是要移除的项目
for(int i = 0; i < choice.length; i++)
if(choice[i].equals(strChoice))
choice[i] = null;
cboChoice.removeAllItems();
cboChoice.addItem(choice);
据我所知,我不知道是否有更简单的方法可以做到这一点,但我似乎无法让它发挥作用。
【问题讨论】:
【参考方案1】:由于您有一个 String 数组和一个 JComboBox 具有相同顺序的相同项目,您可以使用 JComboBox.getSelectedIndex()
检索所选项目的索引位置并从 JComboBox 中删除,您就是数组。
作为建议,我会将您的 String 数组设为 ArrayList,它是一个“更智能”的动态数组,并且可以更好地与您的 JComboBox 保持同步。还要确保先从数组中删除,然后再从 JComboBox 中删除,否则所选索引可能会更改。
ArrayList 声明如下所示:
ArrayList<String> choice = new ArrayList<>();
将您的内容添加到此列表中,如下所示:
choice.add(yourChoice);
删除项目如下:
if (cboChoice.getSelectedIndex() > -1)
choice.remove(cboChoice.getSelectedIndex());
cboChoice.getSelectedIndex();
希望这会有所帮助...此外,一旦您了解其工作原理,我建议您研究 ComboBoxModel。某些摇摆控件具有模型对象,您可以使用这些对象添加/删除/修改内容,而无需参考实际控件。
【讨论】:
【参考方案2】:如果你检查jComboBox Javadoc你会看到
removeItem(Object anObject) 从项目列表中删除项目。
只需调用它即可删除您不再需要的对象。
您提出的代码可以工作(尽管我不确定 jComboBox 将如何处理空值)但不是特别有效。
【讨论】:
谢谢,我现在添加了这个,但是当我运行并删除该项目时,它不会更新 GUI 上的组合框? 您可能需要确保传入准确的字符串对象(即循环遍历并在找到choice[i]
时执行removeItem(choice[i])
)。为了提高效率,请执行break;
,这样您就不会扫描列表的其余部分。【参考方案3】:
此代码有效,但仍有一个问题;您不能删除列表中的最后一项。为了解决这个问题,您可以将一个元素添加到您在删除步骤中忽略的列表中。过去我在列表的开头使用了“”。
我还要指出,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();
【讨论】:
以上是关于如何从 Java 的组合框中删除特定项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 DataGridView 中的选定行将组合框中的特定项目设置为选定项?