为了账号安全,请及时绑定邮箱和手机立即绑定

更新链表。

更新链表。

慕哥9229398 2023-08-04 18:58:05
我的案例非常具体:首先,我有一个已定义的字符串数组,其中包含 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 已被填充,这可能就是为什么我只能看到默认选项的原因。它是否正确?如果是这样,我该如何解决这个问题。请记住,这些全局变量必须保持全局,因为它们也在类的许多其他部分中使用。感谢您的帮助
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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

还有一个JComboBox带有Vector参数,允许添加(与数组相反)。

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

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


查看完整回答
反对 回复 2023-08-04
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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


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

}


查看完整回答
反对 回复 2023-08-04
?
慕村225694

TA贡献1880条经验 获得超4个赞

可以看一下源码: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 的新实例。


查看完整回答
反对 回复 2023-08-04
  • 3 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信