找不到符号listModel.addElement

Mat*_*oth 1 java swing interface jlist

我正在尝试创建我的第一个列表,并且我遇到了错误.

这是我用于列表模型的模板:

    private ListModel getListModel() {

    String[] arrayOfStrings = new String[3];
    arrayOfStrings[0] = "one";
    arrayOfStrings[1] = "two";
    arrayOfStrings[2] = "three";

    ListModel listModel = new DefaultListModel();

    for (int i=0;i<arrayOfStrings.length;i++) {
        listModel.addElement(arrayOfStrings[i]);            
    }   
}    
Run Code Online (Sandbox Code Playgroud)

错误:

error: cannot find symbol
            listModel.addElement(arrayOfStrings[i]);            

symbol:   method addElement(String)

  location: variable listModel of type ListModel
Run Code Online (Sandbox Code Playgroud)

我仍然是使用接口和列表的新手.我下载了一个用于制作列表的示例代码,它们的代码非常相似.我错过了什么?我导入了示例代码导入的每一件事.

Hov*_*els 6

如有疑问,请转到API,因为它会显示所有内容.在这种情况下,API会向您显示该接口,ListModel<E>没有addElement(...)方法.您将不得不将变量声明为DefaultListModel<E>类型,因为这是具有此方法的实现.

参考文献:

话虽如此,您的方法仍然可以返回ListModel接口类型...例如,

// method declared to return the interface, ListModel
private ListModel<String> getListModel() {
    String[] arrayOfStrings = {"one", "two", "three"};

    // make sure to use generic types
    DefaultListModel<String> listModel = new DefaultListModel<>();
    for (String txt : arrayOfStrings) {
        listModel.addElement(txt);
    }
    return listModel; // don't forget to return a result
}
Run Code Online (Sandbox Code Playgroud)


C. *_* L. 5

函数addElement(...)声明在DefaultListModel但不在声明中,ListModel因此只能在声明为DefaultListModel的对象上调用它.

使用DefaultListModel listModel = new DefaultListModel();修复您的代码.