2009-04-13 3 views
6

JList에 대한 사용자 정의 셀 렌더러를 만들 때마다 내가 추가 한 요소가 작업에 응답하지 않습니다. 예를 들어 셀 렌더러에서 ActionListener가있는 요소가있는 JPanel을 반환하면 전혀 응답하지 않습니다.Java Swing - JList 사용자 정의 셀 렌더링 - 작업 캡처

왜 이런가요?

+1

아주 좋은 질문입니다. ItemListeners와 관련이 있다고 생각했지만 지금은 그렇게 생각하지 않습니다 ... 샘플 코드를 찾으려고했지만 성공하지 못했습니다. – Uri

+0

안녕하세요, 저는 같은 문제에 직면 해 있습니다. 문제를 해결할 수 있습니까? – user236501

답변

6

목록 셀 렌더러로 반환하는 항목은 정확히 렌더링을 대상으로합니다. Listener를 JList에 등록합니다 (일반적으로 ListSelectionListener가 필요합니다).

11

렌더러는 세포 구성 요소를 반환하는 공장으로 보일 수도 있지만, 실제로는 접근 방식을 렌더링 플라이급를 다음과 모든 셀을 렌더링하기위한 같은 구성 요소를 사용하여 (getListCellRendererComponent()에 대한 각 호출은 다시 구성하도록되어 특정 셀의 동일한 구성 요소 인스턴스를 반환하고 셀을 렌더링 할 수 있도록 반환합니다.

그런 식으로 JList (및 JTableJTree)은 각 셀의 구성 요소를 설치하지 않고도 방대한 양의 셀을 표시 할 수 있습니다. 부작용으로 렌더링 구성 요소는 이벤트에 응답 할 수 없습니다. 이는 렌더링 루프에서만 사용되기 때문에 구성 요소 트리에는 나타나지 않기 때문입니다.

닐 코 페이는 대신 JList (JTable, JTree)에 리스너를 추가하고, 영향을 한 셀에 파견하여 세포 특정 로직을 처리하는 도우미 메서드 (locationToIndex(...), getCellBounds(...))를 사용할 수 있습니다 말했다 것처럼.

+1

+1 괜찮은 설명을 위해서 – basszero

+1

렌더링 된 구성 요소를 고무 스탬프라고 생각하십시오. –