Java 更新LinkedList
我的情况在这里非常具体: 首先,我已经定义了一个字符串数组,其中包含JComboBox的默认选项(对于所有用户都是相同的):Java 更新LinkedList,java,swing,linked-list,jcombobox,Java,Swing,Linked List,Jcombobox,我的情况在这里非常具体: 首先,我已经定义了一个字符串数组,其中包含JComboBox的默认选项(对于所有用户都是相同的): private static final String[] JOB_TYPE = {options go here}; 这些选项加载到JComboBox中,如下所示: private JComboBox jobType = new JComboBox(JOB_TYPE); for (int j = 0; j < modelJobCustomTyp
private static final String[] JOB_TYPE = {options go here};
这些选项加载到JComboBox中,如下所示:
private JComboBox jobType = new JComboBox(JOB_TYPE);
for (int j = 0; j < modelJobCustomType.getSize(); j++) {
allJobs.add(((XmlJobCustomElem) modelJobCustomType.getElementAt(j)).getName());
}
然后,我还必须在JComboBox中加载不同用户的其他选项。由于数组具有固定数量的元素,因此我必须找到另一种方法将默认选项之外的特定选项添加到JComboBox中。我所做的是,创建了一个LinkedList,并使用数组中的asList方法加载数组中的默认选项,然后添加其他选项,这些选项因用户而异:
private List<String> allJobs = new LinkedList<String>(Arrays.asList(JOB_TYPE));
现在,我在allJobs中有了所有默认选项,并且由于它不再是一个数组,我还可以向其中添加特定选项,这些选项将按如下方式加载:
private JComboBox jobType = new JComboBox(JOB_TYPE);
for (int j = 0; j < modelJobCustomType.getSize(); j++) {
allJobs.add(((XmlJobCustomElem) modelJobCustomType.getElementAt(j)).getName());
}
for(int j=0;j
现在,我的问题是:
当我检查JComboBox的内容时,我只找到默认选项,而没有找到特定的选项,尽管我可以使用调试器看到列表大小增加了,并且它也包含特定的选项
我的猜测是,由于jobType、JOB_TYPE和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());
}
主类{
私有静态最终列表FIXED_OPTIONS=Arrays.asList(“fixed0”、“fixed1”、“fixed2”);
private List allJobs=new ArrayList(固定选项);
{
整数计数=6;
for(int i=0;i
您可以查看源代码: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: }
构造函数创建DefaultComboxModel的一个新实例。组合框被赋予从列表派生的数组。之后添加到列表不会更改数组值(数组是固定长度值) 还有一个
JComboBox
,带有Vector
参数,允许添加(与数组相反)
然而,最好的是一个JComboBox
,它带有一个级别最高的comboxmodel
参数。有一个默认实现:
DefaultComboxModel=new DefaultComboxModel(作业类型);
模型.附录(“自定义0”);
型号.附录(“客户1”);
combobox=新的JComboBox(型号);
听起来你是对的。在初始化所有作业之前,是否可以延迟实例化jobType
?或者,您可以使用JComboxAPI来更新其内容(addItem(…)
,removietem(…)
,等等)。我甚至不知道addItem()方法。非常感谢你,这正是我必须做的。你能添加你的评论作为回答吗,这样我就可以接受了?谢谢你的时间。你的答案适用于许多不同的场景,但不幸的是,我的答案不适用。初始化时,编译器将抛出ArrayIndexOutOfBoundsException
,因为modelJobCustomType
是MapListComboModel
仍然没有元素且大小为零。因此,当我尝试像这样加载自定义作业时:allJobs.add(((xmljobscustomelem)modeljobscustomtype.getElementAt(j)).getName()代码>,将引发异常。