更新链接列表



我的情况在这里非常具体:

首先,我有一个已经定义的字符串数组,其中包含JComboBox的默认选项(对于所有用户来说总是相同的(:

private static final String[]   JOB_TYPE = {options go here};

这些选项加载到 JComboBox 中,如下所示:

private JComboBox   jobType = new JComboBox(JOB_TYPE);

然后,还有其他选项可能因用户而异,我也必须在 JComboBox 中加载这些选项。由于数组具有固定数量的元素,因此我必须找到另一种方法将默认选项以外的特定选项添加到JComboBox中。所以我所做的是,我创建了一个 LinkedList,并使用 Arrays 中的 asList 方法来加载数组的默认选项,然后添加其他选项,这些选项因用户而异:

private List<String> allJobs = new LinkedList<String>(Arrays.asList(JOB_TYPE));

allJobs现在可以使用 toArray(( 方法作为 JCombobox 的参数传递:

private JComboBox   jobType = new JComboBox(allJobs.toArray());

现在,我在 allJobs 中拥有所有默认选项,并且由于它不再是数组,我还可以向其添加将按如下方式加载的特定选项:

for (int j = 0; j < modelJobCustomType.getSize(); j++) {
allJobs.add(((XmlJobCustomElem) modelJobCustomType.getElementAt(j)).getName());
}

现在,这是我的问题:

当我检查 JComboBox 的内容时,我只找到默认选项,而不是特定的选项,即使我可以使用调试器看到列表大小增加了并且它还包含特定选项。

我的猜测是,由于jobType,JOB_TYPE和allJobs是全局变量,因此在编译器到达加载特定选项的代码部分之前,ComboBox就会被填充,这可能就是为什么我只能看到默认选项的原因。

这是对的吗?如果是这样,我该如何解决这个问题。请记住,这些全局变量必须保持全局,因为它们也在类的许多其他部分中使用。

感谢您的帮助

组合框被赋予从列表派生的数组。之后添加到列表中不会改变数组值(数组是固定长度值(,

还有一个带有Vector参数的JComboBox,它允许添加(而不是数组(。

但是,最好的是具有最高级别ComboBoxModel<E>参数的JComboBox。有一个默认的实现DefaultComboBoxModel

DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(JOB_TYPE);
model.addElement("custom0");
model.addElement("custom1");
combobox = new JComboBox(model);

您可以像这样初始化您的类,以便在初始化时将所有作业保留在allJobs中,而不是像 Jamie 的解决方案那样仅存在于JComboBox中的自定义作业。您还可以在构造函数中执行实例字段的所有初始化:

class Main {
private static final List<String> FIXED_OPTIONS = Arrays.asList("fixed0", "fixed1", "fixed2");
private List<String> allJobs = new ArrayList<>(FIXED_OPTIONS);
{
int count = 6;
for (int i = 0; i < count; i++) {
allJobs.add("custom" + i);
}
}
private JComboBox jobType = new JComboBox(allJobs.toArray());
}

你可以看看源代码: JComboBox

181:   /**
182:    * Constructs JComboBox with specified list of items.
183:    *
184:    * @param itemArray array containing list of items for this JComboBox
185:    */
186:   public JComboBox(Object[] itemArray)
187:   {
188:     this(new DefaultComboBoxModel(itemArray));
189:     
190:     if (itemArray.length > 0) 
191:       setSelectedIndex(0);
192:   }

构造函数创建 DefaultComboBoxModel 的新实例。

相关内容

  • 没有找到相关文章

最新更新