2013-07-10 2 views
0

사용자 정의 렌더러의 코드 대신 Facility 개체가 필요하므로 오류가 발생합니다.의 ListCellRenderer 캐스팅 예외 여기

왜 이런 식으로 동작합니까?

업데이트가 : 어떤 요소가없는 경우는이 방법 (기능) 동작 내가 왜 오류 때문에 주물 것을 알고 내가 instance of 사용하는 방법을 알고, 질문은, 나는 그것을하지 기대 전혀 부름을받을 수는 있지만 왜 부름을 받았 는가? 결국 요소가 없으면 형식은 무엇입니까?

업데이트 : 허용되는 대답은 다음과 같습니다. 왜 그렇게 행동하는지에 관해서는 목록에 빈 문자열이 있어야하기 때문입니다. 콤보 상자를 처음 초기화 할 때 기본적으로 선택되는 빈 문자열을 알 수 있습니다.

+0

1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 항상 오류 및 예외 출력을 복사/붙여 넣기하십시오. –

+0

다운 캐스팅이 중요하지 않다면,'instanceof'를 사용하십시오 – nachokk

+0

Xxx 렌더러 내부의 렌더링 구성 요소에 값을 설정하지 마십시오 – mKorbel

답변

2
private class FacilityElement extends javax.swing.JLabel implements javax.swing.ListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     if(isSelected) { 
      setBackground(list.getSelectionBackground()); 
      setForeground(list.getSelectionForeground()); 
     } 
     else { 
      setBackground(list.getBackground()); 
      setForeground(list.getForeground()); 
     } 
     setFont(list.getFont()); 
     if (value instanceof Facility) { // Try this 
      setText(" " + ((Facility) value).getName()); 
     }  
     setOpaque(true); 

     return this; 
    } 

} 
+0

코드 포맷을 사용하십시오 코드, 입출력 및 HTML 또는 XML과 같은 구조화 된 문서의 경우 이를 위해 샘플을 선택하고 메시지/편집 양식 위에있는 '{}'버튼을 클릭하십시오. –