更新链表。

我的案例非常具体:


首先,我有一个已定义的字符串数组,其中包含 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));

现在可以使用 toArray() 方法将 allJobs 作为 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 已被填充,这可能就是为什么我只能看到默认选项的原因。


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


感谢您的帮助


慕哥9229398
浏览 131回答 3
3回答

斯蒂芬大帝

组合框被赋予从列表派生的数组。之后添加到列表中不会改变数组值(数组是固定长度值),还有一个JComboBox带有Vector参数,允许添加(与数组相反)。然而,最好的参数是最高级别JComboBox的。ComboBoxModel<E>有一个默认实现DefaultComboBoxModel:DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(JOB_TYPE); model.addElement("custom0"); model.addElement("custom1"); combobox = new JComboBox(model);

拉莫斯之舞

您可以像这样初始化您的类,以便在初始化时保留所有作业,allJobs而不是仅存在于JComboBoxJamie 解决方案中的自定义作业。您还可以在构造函数内完成实例字段的所有初始化:class Main {&nbsp; &nbsp; private static final List<String> FIXED_OPTIONS = Arrays.asList("fixed0", "fixed1", "fixed2");&nbsp; &nbsp; private List<String> allJobs = new ArrayList<>(FIXED_OPTIONS);&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; int count = 6;&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < count; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allJobs.add("custom" + i);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; private JComboBox jobType = new JComboBox(allJobs.toArray());}

慕村225694

可以看一下源码:JComboBox181:&nbsp; &nbsp;/**182:&nbsp; &nbsp; * Constructs JComboBox with specified list of items.183:&nbsp; &nbsp; *184:&nbsp; &nbsp; * @param itemArray array containing list of items for this JComboBox185:&nbsp; &nbsp; */186:&nbsp; &nbsp;public JComboBox(Object[] itemArray)187:&nbsp; &nbsp;{188:&nbsp; &nbsp; &nbsp;this(new DefaultComboBoxModel(itemArray));189:&nbsp; &nbsp; &nbsp;190:&nbsp; &nbsp; &nbsp;if (itemArray.length > 0)&nbsp;191:&nbsp; &nbsp; &nbsp; &nbsp;setSelectedIndex(0);192:&nbsp; &nbsp;}构造函数创建 DefaultComboBoxModel 的新实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java