2009-08-03 2 views
12

JTree에 체크 박스를 추가해야합니다. 커스텀 TreeCellRenderer/TreeCellEditor는 올바른 접근 방식처럼 보입니다. 지금까지 나는 the CheckBoxNodeRenderer approach in this webpage을 사용했습니다. 두 가지를 제외하고는 정상적으로 작동합니다.JTree with checkboxes

  1. 체크 상자 위와 아래에 공백이 추가로 있습니다. 정규 JTree와 동일하게 유지하고 싶습니다.
  2. 나는 (체크 박스를 전환을 시도해야하는) 체크 박스 자체를 클릭하고 이벤트 리스너가 해당 트리 노드 클릭으로 이것을 해석 할 수 있도록해야한다 확인란 (와 관련된 텍스트를 클릭 구별 싶습니다 이 일을 할 수있는 방법은

가) 적절한 어떤 행동 취할? 체크 박스가있는 JTree를 둘러 보았지만별로 찾을 수 없습니다. JIDE는 좋아 보이지만이 경우에는 무료 오픈 소스 소프트웨어 (GPL은 괜찮지 만 LGPL은 괜찮습니다)를 사용해야합니다.

답변

7

# 2에서는 패널을 편집기/렌더러로 만들고 체크 박스와 함께 레이블을 추가 할 수 있습니다. 레이블은 텍스트이고 확인란은 선택되지 않습니다. 텍스트가 추가되었습니다. 이 @aperkins 제안 당

+0

오, 좋은 생각인데, 나는 그것에 대해 생각하지 않았습니다. –

+1

DefaultTreeCellRenderer 코드를 복사하고 JLabel의 확장을 JPanel로 바꾸면 "성능에 우선 적용"되는 메서드를 많이 제거해야합니다. 그렇지 않으면 빈 JTree가 생깁니다. –

4

내가하는 TableCellRenderer에서 일을 결국 무엇인가, 그것은 잘 작동하는 것 같다 :

final private JPanel nodeRenderer = new JPanel(); 
final private JLabel label = new JLabel(); 
final private JCheckBox check = new JCheckBox(); 

    ... 

// in constructor: 
final Insets inset0=new Insets(0,0,0,0);   
this.check.setMargin(inset0); 
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST); 
this.nodeRenderer.add(this.label, BorderLayout.CENTER); 

키를 여백에 불필요한 공간을 제거하기 위해 (a)는 호출을 것 같다 체크 박스 여백을 줄이기 위해 JCheckBox.setMargin(), 그리고 (b) JPanel에 BorderLayout을 사용합니다.

9

이 질문은 이미 답을 알지만, 난 그냥 몇 가지 포인트를 지우려면 :

1) JIDE 공통 레이어는 듀얼 라이센스 (GPL 클래스 패스 예외 무료 상용 라이센스)에 있습니다. 즉, 라이센스 문제없이 일반 레이어 프로젝트를 사용할 수 있습니다. 확인하려면 다음 링크를 확인하십시오 : http://www.jidesoft.com/products/oss.htm. 공통 계층에는 검사 가능한 JTree (com.jidesoft.swing.CheckBoxTree)의 구현이 포함됩니다.

2) Master라는 Santhoosh Kumar가 2005 년에 작성한 블로그에서 언급 한 요구 사항의 확인란을 사용하여 JTree를 구현하는 방법을 설명합니다 (http://www.jroller.com/santhosh/entry/jtree_with_checkboxes). 제 의견으로는 읽을 가치가 있습니다.

+0

+1 라이센스 힌트로 +1 –

+1

JIDE Common Layer는 자신의 UI를 설치하고 수정 방법을 찾지 못했기 때문에 모든 collor 구성표를 파기합니다. 누군가 공유하는 방법을 알고있는 경우. – Bax

2

나는 org.scijava:swing-checkbox-tree로 메이븐 중앙에서 사용할 수있는 독립 Swing Checkbox Tree 프로젝트를 발표했다.

패키지는 John Zukowski의 CheckBox Node Tree Sample 코드를 기반으로합니다. 의존성이없는 BSD-2 라이센스입니다.

노드 유형을 DefaultMutableTreeNodeCheckBoxNodeData 개까지 섞어서 일치시킬 수 있습니다. 또한 확인란 노드를 리프가 아닌 노드로 사용할 수 있습니다.

# 1 : 모든 플랫폼에서 테스트하지는 않았지만 OS X 시스템에서는 CheckBoxNodeData 노드가 정확히 DefaultMutableTreeNode 노드와 동일한 픽셀 높이입니다.

질문의 문제점 # 2에 대해서 :이 라벨 대 (노드 취소/체크하기) 체크 박스를 클릭 구분할 (제안 aperkins 같은) JPanelJCheckBox + JLabel를 사용하는 것은 (노드를 선택합니다) .

예 사용량 :

후자의 예는 재귀 treeNodesChanged 표시 (선택되고 박스에 응답하여 서브 트리 토글 또는 체크 코드를 가지고 방법).