我正在运行以下代码:

    public ArrayList<String> equipAvail;
        {
        equButton2 = new JButton();
        equButton2.setText("Apply");
        equButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                //read the contents of equlist2
                for(int i=0;i<equList2.getModel().getSize();i++){
                    //fill equipAvail ArrayList with the contents of equlist2
                    //System.out.println(equList2.getModel().getElementAt(i));
                    //System.out.println(equList2.getModel().getElementAt(i) instanceof String);
                    equipAvail.add(equList2.getModel().getElementAt(i));
                    //pass equipAvail to the user's EquipmentAvailable property
                    user.setEquipmentAvailable(equipAvail);
                }
            }
        });
    }


如果我注释掉行equipAvail.add(equList2.getModel().getElementAt(i));,并运行当前注释掉的行//System.out.println(equList2.getModel().getElementAt(i));,它会将选择内容打印到控制台。
如果我运行行//System.out.println(equList2.getModel().getElementAt(i) instanceof String);,则对于填充到equList2中的尽可能多的对象,它报告为true。

但是以某种方式,当我尝试如图所示运行它时,它甚至无法编译。给出错误“ ArrayList类型中的方法add(String)不适用于参数(Object)”。如果我在equipAvail行的末尾使用.toString(),它将进行编译,但是当我单击GUI中的按钮时出现相同的错误。

我需要equipAvail是ArrayList,并用出现在equList2中的所有字符串填充。

为什么不能使用equilAvail.add将我知道是字符串的这些对象添加到ArrayList中?

如何用equList2中的条目填充equipAvail?

谢谢!!

对于上下文,可能需要注意equList2这样开始其生命:

    private JList getEquList2() {
    if(equList2 == null) {
        ListModel equList2Model =
            new DefaultComboBoxModel(
                    new String[] {""});
        equList2 = new JList();
        equList2.setModel(equList2Model);
        equList2.setVisibleRowCount(4);
    }
    return equList2;
}


但是随后使用绑定到“移动”按钮的equList2.setListData(equList1.getSelectedValues());命令进行更新以包含一些其他数据,该按钮将equList1条目的子集移动到equList2。

最佳答案

ListModel是通用类型,但是您将其用作原始类型。

也许ListModel<String> = new DefaultComboxBoxModel<String>(new String[] {""})

07-24 09:37