고무 스탬프를 원하지 않으면 실제 구성 요소를 사용하는 자체 JList 구현을 만들어야합니다.
렌더러의 각 행에 대해 각 구성 요소를 캐싱하고 값을 바인딩 한 다음 JList에서 렌더러에 렌더러에 요청하면 해당 인스턴스를 반환하여 고무 스탬프 효과를 시도해 볼 수 있습니다. 20 행을 표시하는 경우 렌더러에 20 개의 인스턴스를 캐시해야하고 행이 표시되지 않는 경우에만 하나의 인스턴스를 다시 사용할 수 있기 때문에 매우 위험합니다. 즉, A 유형, B 유형 5, C 유형 2 및 D 유형 3 유형 (유형 A, B, C, D, E)의 5 가지 고유 구성 E가 표시됩니다. 그러나 표시되는지 여부를 몰라도 해당 구성 요소 중 하나를 재사용 할 수는 없습니다. 따라서 행이 표시되고 렌더링하는 행에 적합한 유형 인 경우 계정을 고려해야합니다. 그리고 행이 숨겨진 후에 정리해야합니다.
또 다른 옵션은 가지고있는 모든 X 변형을 캡슐화 한 행에 대해 단일 구성 요소를 만들어 CardLayout에 배치하는 것입니다. 그런 다음 표시되는 행당 하나를 간단히 캐싱하고 해당 행을 렌더링 할 때 표시되는 카드를 간단히 바꿀 수 있습니다. 나는 그것이 당신을위한 가장 간단한 선택일지도 모른다고 생각합니다.
하드 이벤트가 라우팅 이벤트가 될수록 마우스 클릭이나 키보드 이벤트 등을 활성 구성 요소로 보내 일반 구성 요소처럼 응답하게됩니다. 사용자가 단추를 클릭 할 때 단추를 다시 렌더링하는 등의 작업은 어려울 것입니다. 불가능하지는 않지만 지루합니다.
마지막으로 가변 행 높이 JList는 고통입니다. 특히 row가 표시되는지 아닌지 알아내는 계산에서는 다음과 같은 간단한 수학을 수행 할 수 없기 때문에 int rowHeight = jlist.getHeight/model.size()를 사용하십시오. 작동하지 않습니다. 행이 보이는지 아닌지 알아 내기 위해 각 행의 높이를 계산해야합니다.
당신이하는 일은 많은 작업이며 JList의 가정을 해결하기 위해 매우 까다로운 코딩입니다. 결국 다양한 디자인 결정을 내리는 자체 List 컨트롤을 구현하는 것이 더 쉬울 수도 있습니다. 어느 쪽이든 그것을 요구하는 것은 Swing을 잘 작동하도록합니다.
더 나은 도움을 빨리 여기 – mKorbel
을 http://sscce.org/을 게시하시기 바랍니다 당신은 정말 스윙 MVC에 대한 이해가 필요합니다; 필요한 모든 것을 이미 사용할 수있게되었습니다. 엔티티를 설명하기 위해 모두 연결하는 방법을 알아야합니다. – mre
예. 내 스윙 지식은 완벽하지 않으며 조각으로 구성 요소를 구성하는 데 사용할 수 있지만 안정적이고 테스트 된 구현이 존재하기를 바랍니다. 나는 오늘 밤 재발견하고 싶지 않다. –