2016-12-22 1 views
1

첫 번째 목록을 만들려고하는데 오류가 발생했습니다.기호를 찾을 수 없습니다. listModel.addElement

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]);    
    } 
}  

오류 :

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

symbol: method addElement(String) 

    location: variable listModel of type ListModel 

내가 인터페이스뿐만 아니라 목록을 사용하여 여전히 새로운 오전 여기

내가 목록 모델에 사용하고있는 템플릿입니다. 목록을 만들기위한 예제 코드를 다운로드했으며 코드는 매우 비슷했습니다. 내가 뭘 놓치고 있니? 예제 코드가 가져온 모든 것을 하나씩 가져 왔습니다.

+0

addElement()는 DefaultListModel의 메서드로 ListModel 인터페이스에는 없습니다. 따라서이 변수를 사용할 수 있으려면 변수가 ListModel이 아닌 DefaultListModel 유형으로 선언되어야합니다. 또한 원시 형식을 사용하지 마십시오. http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it. DefaultListModel 을 사용하십시오. –

답변

6

의심스러운 경우 API가 모두 표시됩니다. 이 경우 API는 ListModel<E> 인터페이스에 addElement(...) 메소드가 없음을 보여줍니다. 변수를 DefaultListModel<E> 유형으로 선언해야합니다. 그 이유는 이것이이 메소드를 구현 한 것이기 때문입니다.

참고 :

  • ListModel<E> API
  • DefaultListModel<E> API이 예 ...이, 당신의 방법은 여전히의 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 
    } 
    
+0

감사합니다. 코드를 더 자세히 읽어야합니다. –

5

기능 addElement(...)은에 선언되어 있습니다.이지만 ListModel에는 없으므로 DefaultListModel로 선언 된 객체에서만 호출 할 수 있습니다.

코드를 수정하려면 DefaultListModel listModel = new DefaultListModel();을 사용하십시오.

관련 문제