Java Swing组合框

3
我有一个组合框和一个字符串数组,其中包含所有组合框中的值。我从组合框中擦除项目,然后想将字符串数组中的值添加进去。它似乎不让我直接添加字符串数组。我尝试逐个遍历字符串并逐一添加项目,但无法这样做(或者至少按照我写的方式,它无法正常工作)。
这可能是一个愚蠢的问题,但我刚开始使用Java中的Swing。
以下是我想要“重新加载”组合框项目的代码:
String str = JOptionPane.showInputDialog(null, "Enter Name: ", "", 1);
        if(str != null){
              JOptionPane.showMessageDialog(null, "New name added: " + str, "", 1);
              nameCreator.addName(strNames, str);
              strNames = NameLoader.getNames();
              nameList.removeAllItems();
              nameList.addItem(strNames);
        }

编辑:有一个小笔误,我没有意识到出了什么问题。现在已经解决了。感谢大家的帮助。


1
能否加入一些你之前尝试过但没有成功的代码? - sealz
出了什么问题?是什么都没发生,还是出现了错误?如果是后者,是哪种错误? - Bart van Heukelom
4个回答

4

您是否使用了addItem(Object anObject)方法?

您应该遍历数组并使用该方法:

String[] data = {a;b;c;d;e}
for(int i=0; i < data.length; i++){
  comboBox.addItem(data[i]);
}

Luca


哦,糟糕,我最初尝试时打错了一个字。但现在它可以工作了。抱歉,在假设代码正确之前,我应该检查一下我的代码。感谢您的帮助! - mbreen
没问题!别忘了投票并检查有用的答案。 - Maverik

3

我建议您实现自己的ComboBoxModel:


public class YourComboBoxModel implements ComboBoxModel{

    @Override
    public Object getSelectedItem() {
        //return selected item Object;
    }

    @Override
    public void setSelectedItem(Object anItem) {
        //set selected item
    }

    @Override
    public Object getElementAt(int index) {
        //return the element based on the index
    }

    @Override
    public int getSize() {
        //return the size of your combo box list
    }

}

然后通过将该模型作为参数构建您的JComboBox:

ComboBoxModel yourModel = new YourComboBoxModel();
JComboBox yourComboBox = new JComboBox(yourModel); 

使用自定义的ComboBoxModel是最灵活的解决方案。它允许您更改保存数据的数据结构以及访问它的方式,仅修改您实现的模型而不是其他无关的代码部分。


为什么他需要扩展comboBox,当它已经提供了所有他所需的功能?也许我错了,但我认为这是不必要的。我错了吗? - Maverik
2
@lucaghera:当然可以。但是如果将来组合框中显示的数据变得更加复杂呢?使用ComboBoxModel有助于将模型与其表示分离。但这只是我的观点。 - Heisenbug
在这方面,我完全同意你的看法!但是对于他现在开始来说,似乎有点过头了 ;) - Maverik

1
无论何时,当您需要使用可编辑模型来处理此类GUI元素时,最好使用模型。对于JComboBox,您可以使用易于使用的DefaultComboBoxModel
它很容易使用:
DefaultComboBoxModel model = new DefaultComboBoxModel(new String[]{"Item1","Item2","Item3"});
JComboBox comboBox = new JComboBox(model);

以这种方式,您将模型附加到组合框,并且它将显示来自数组的项目。每当您需要更改它们时,只需执行以下操作:

model.removeAllElements(); // if you need to empty it
model.addElement("New Item1");
model.addElement("New Item2");
model.addElement("New Item3");
model.fireContentsChanged();

然后您将在GUI内部更新新项目。

额外提示:如果您需要管理自定义对象而不是字符串,您可以轻松地将它们添加到(方式如前所示),只需提供自定义的 public String toString() 方法即可管理字符串表示形式。

在您的示例中,我不明白为什么每次都要重新添加所有项目,您只需使用新字符串调用addItem,而不必删除并重新添加它们。


0

在编程中,为了方便地更改组合框中的内容,最好的方法是首先定义一个数组列表。如果您想要实现动态添加,可以使用文本字段,然后在文本字段中运行数组列表。

textField = new JTextField();
    textField.setBounds(131, 52, 86, 20);
    contentPane.add(textField);
    textField.setColumns(10);

那么你需要创建一个数组列表

ArrayList al=new ArrayList();

然后你需要将文本框中的文本与一个字符串相等

String str=textfield.getText();

然后将其添加到您的数组中

al.add(str);

然后将所有项目添加到您的组合框中。

JComboBox comboBox = new JComboBox();
    comboBox.setBounds(112, 115, 145, 20);
    contentPane.add(comboBox);
            comboBox.addItem(al);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接