java swing组合框

java swing组合框,java,swing,combobox,Java,Swing,Combobox,我有一个组合框和一个字符串数组,其中包含组合框的所有值。我从组合框中删除项目,然后想从字符串数组中添加值。它似乎不允许我仅仅添加一个字符串数组。我试图通过字符串一个一个地添加条目,但不让我这么做(或者至少按照我写的方式,这样做行不通) 这似乎是个愚蠢的问题,但我对java中的swing还不熟悉 下面是我想从组合框中“重新加载”项目的代码: String str = JOptionPane.showInputDialog(null, "Enter Name: ", "", 1);

我有一个组合框和一个字符串数组,其中包含组合框的所有值。我从组合框中删除项目,然后想从字符串数组中添加值。它似乎不允许我仅仅添加一个字符串数组。我试图通过字符串一个一个地添加条目,但不让我这么做(或者至少按照我写的方式,这样做行不通)

这似乎是个愚蠢的问题,但我对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);
        }

编辑:打了一个小的打字错误,但没有意识到错在哪里。现在工作。谢谢大家的帮助。

您是否使用了方法
添加项(对象或对象)

应使用该方法迭代数组:

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

Luca

每当您需要为这些GUI元素使用可编辑模型时,使用模型总是很好的。对于
JComboBox
您有一个易于使用的
defaultcomboxmodel

它很容易工作:

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中更新新项目

另外,如果需要管理自定义对象而不是字符串,则可以轻松地将它们添加到
JComboBox
(与前面显示的方法相同),只需提供一个自定义
public String toString()
方法来管理字符串表示


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

我建议您实现自己的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是最灵活的解决方案。它允许您更改保存数据的数据结构以及访问数据的方式,只修改您实现的模型,而不修改代码中其他不相关的部分。

在组合框中添加一些内容以便轻松更改的最佳方法是先描述数组列表,如果您想成为动态用户,可以使用文本字段,然后在文本字段中运行数组列表

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);

介意添加一些不起作用的代码吗?出了什么问题?是什么都没发生还是你有错误?如果是后者,那是哪一个?哦,哇,对不起,我最初试的时候打错了。但现在它起作用了。对不起,我应该先检查一下我的代码,然后再假设它是正确的。谢谢你的帮助!没问题!别忘了投票并检查有用的答案。既然组合框已经提供了他所需要的一切,为什么他还要扩展它呢?也许我错了,但我认为没有必要。“我错了吗?”卢卡赫拉:当然可以。但是如果将来组合框中显示的数据会变得更复杂呢?使用ComboBoxModel有助于将模型与其表示分离。但这只是我的观点。在这个方向上,我完全同意你!但这似乎比他现在开始需要的更多;)