2009-05-19 7 views
1

JList에서 사용자 정의 렌더러를 사용하고 있지만 렌더링 된 구성 요소 중 하나도 액세스 할 수 없습니다.JList에서 구성 요소의 이벤트를 활성화하는 방법

list.setCellRenderer(new ListCellRenderer() { 

    public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) { 

     JCheckBox c = new JCheckBox(); 
     JButton b = new JButton("My Button!"); 

     JPanel p = new JPanel(new FlowLayout()); 
     p.add(c); 
     p.add(b); 

     if (isSelected) { 
      p.setBackground(Color.LIGHT_GRAY); 
     } 
     return p; 
    } 
}); 

확인란이나 버튼을 클릭해도 아무런 변화가 없습니다. 또한 버튼에 ActionListener를 추가하려고 시도했지만 클릭 한 상태에서는 실행되지 않았습니다. 선택한 항목이있는 동안 배경색 만 작동하는 유일한 것입니다 (스크린 샷 참조).

버튼을 클릭해도 "클릭 애니메이션"이 없습니다.

alt text http://foto.darth.cz/pictures/2009-05-19_151057.png

그래서 제 질문은, 내가 렌더링 구성 요소에 고르게을 가능하게 다른 뭔가를해야합니까?

+1

참고로, 렌더러의 새로운 구성 요소를 만드는 것은 좋은 생각이 아닙니다. 렌더러는 고무 스탬프라고 생각하십시오. 목록은 목록 항목을 기반으로 내용을 변경 한 다음 렌더러를 그래픽 영역에 스탬프 처리합니다. 매번 메모리를 낭비하고 가비지 컬렉터를 불만족스럽게 만들 때마다 새로운 것을 만들면 – basszero

답변

3

실제로 테이블과 동일합니다. 렌더러 구성 요소는 실제로 실제 구성 요소가 아닙니다. 가짜 구성 요소를 그리는 데 사용되는 템플릿과 같습니다. JScrollPane에 컴퍼넌트를 찔러 넣거나, JTable에 1 열을 작성해, 적절한 렌더러/에디터를 대신 구현하는 것은 어떻습니까?

+0

예, 렌더러는 그들이 말하는 것을 거의 처리합니다. 렌더링합니다. 어떤 논리를 전달하는 데 사용해서는 안됩니다. –

관련 문제