2011-12-21 1 views
-1

각 엔티티가 JPanel을 기반으로 위젯으로 렌더링되는 엔티티 목록이 있습니다. 위젯에는 동적 인 동작이 있습니다. 일단 패널에 배치되면 기본 엔터티에 의해 변경 될 수 있습니다. 이것은 자동적으로 발생합니다. 또한 일부 위젯은 다른 작업 (예 : 버튼 클릭)으로 크기를 조정할 수 있습니다.동적 JList 구현

질문은 JList과 같은 것으로 조직하는 방법이지만 고무 도장 기술은 없습니다. 즉, 나는 각자 cellrenderer로 렌더링 된 아이템이 "살아있다"고 생각하는 JList을 원합니다.

수직 BoxLayoutJPanel에 따라 지금 내가 구현 한 빠른 - 및 - 더러운 구성 요소, 그것은 JList's 렌더러 구성 요소를 사용하고 모델 ...하지만 내 구현이 너무 더러워 ...

음 .. 그래 JTable을 사용하는 것은 적합하지 않습니다.

아이디어가 있으십니까?

+0

더 나은 도움을 빨리 여기 – mKorbel

+0

을 http://sscce.org/을 게시하시기 바랍니다 당신은 정말 스윙 MVC에 대한 이해가 필요합니다; 필요한 모든 것을 이미 사용할 수있게되었습니다. 엔티티를 설명하기 위해 모두 연결하는 방법을 알아야합니다. – mre

+0

예. 내 스윙 지식은 완벽하지 않으며 조각으로 구성 요소를 구성하는 데 사용할 수 있지만 안정적이고 테스트 된 구현이 존재하기를 바랍니다. 나는 오늘 밤 재발견하고 싶지 않다. –

답변

0

고무 스탬프를 원하지 않으면 실제 구성 요소를 사용하는 자체 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을 잘 작동하도록합니다.

+0

예. JList 소스를 빠르게 scolling하면 현재 기존 구성 요소를 기반으로하는 것이 너무 어렵다는 것을 알게되었습니다. 내 스윙 지식이 그렇게 깊지는 않아. 이전에 작성한 것처럼 레이아웃, scrollpanel 및 jpanel을 기반으로 버그가있는 해결 방법을 구현합니다. 그러나 나는 아직도 이전에 누군가가 이미 그런 문제를 만났기를 바랍니다. –

0

확인. 그러한 구성 요소의 구현을 찾지 못했습니다. 그것을 첫번째 것으로합시다. https://github.com/wertlex/JActiveList

P. 나는 이것이 적당한 방법 구현이라고 생각하지 않는다 ... 그러나 그것은 작동한다.

-1

사용의 JList와의 ActionListener XD

+0

무엇을 어떻게 정확하게 할 수 있습니까? -1 – kleopatra