문제

Jtree에 확인란을 추가해야합니다. 맞춤형 Treecellrenderer/Treecelleditor는 올바른 접근 방식처럼 보입니다. 지금까지 나는 사용했다 이 웹 페이지에서 CheckBoxNoderenderer가 접근합니다. 두 가지를 제외하고는 작동합니다.

  1. 확인란 아래에 + 위의 추가 공백이 있습니다. 나는 정기적 인 Jtree와 동일하게 유지하고 싶습니다.
  2. 확인란 자체를 클릭하는 것 (확인란을 전환하려고 시도)과 확인란과 관련된 텍스트를 클릭하는 것을 구별하고 싶습니다 (이벤트 리스너가 해당 트리 노드를 클릭하는 것으로 해석 할 수 있어야합니다. 적절하다)

이런 일을하는 방법이 있습니까? 확인란이있는 Jtrees를 둘러 보았습니다. 많이 찾을 수 없습니다. Jide는 좋아 보이지만이 경우 무료 오픈 소스 소프트웨어를 사용해야합니다 (GPL은 괜찮지 않습니다. LGPL은 괜찮습니다). (또는 내 자신의 확인란 트리 만들기)

도움이 되었습니까?

해결책

#2의 경우 패널을 편집기/렌더러로 만들고 확인란과 함께 레이블을 추가 할 수 있습니다. 레이블은 텍스트이며 확인란에 텍스트가 추가되지 않습니다.

다른 팁

이 질문이 이미 답변되었음을 알고 있지만 몇 가지 요점을 지우고 싶습니다.

1) Jide Common Layer는 이중 라이센스가 있습니다 (ClassPath 예외 및 무료 상용 라이센스가있는 GPL). 즉, 라이센스 문제없이 공통 계층 프로젝트를 사용할 수 있습니다. 확인하려면 다음 링크를 확인하십시오. http://www.jidesoft.com/products/oss.htm. 공통 계층에는 Checkable Jtree (com.jidesoft.swing.checkboxtree)의 구현이 포함됩니다.

2) 2005 년부터 마스터 자신의 Santhosh Kumar의 블로그가 있으며, 언급 한 요구 사항이있는 확인란이있는 Jtree를 구현하는 방법을 설명합니다. http://www.jroller.com/santhosh/entry/jtree_with_checkboxes. 제 생각에는 읽을 가치가 있습니다.

@aperkins 제안에 따르면 이것이 내가 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을 사용하는 것 같습니다.

독립형을 발표했습니다 스윙 확인란 트리 Maven Central에서 사용할 수있는 프로젝트 org.scijava:swing-checkbox-tree.

패키지는 John Zukowski를 기반으로합니다 확인란 노드 트리 샘플 암호. 의존성이없는 BSD-2 라이센스입니다.

혼합 및 일치 허용합니다 DefaultMutableTreeNode 그리고 CheckBoxNodeData 노드 유형. 또한 체크 박스 노드를 비 잎 노드로 허용합니다.

질문의 문제 #1 : 나는 모든 플랫폼에서 테스트하지 않았지만 내 OS X 시스템에서 CheckBoxNodeData 노드는 픽셀에서 정확히 같은 높이입니다. DefaultMutableTreeNode 노드.

질문의 문제 #2 : JCheckBox + JLabel 안에 JPanel (처럼 aperkins 제안) 확인란을 클릭하여 (노드를 확인/선택 해제하려면)와 레이블 (노드를 선택하기 위해)을 차별화합니다.

예제 사용 :

후자의 예는 또한 확인되거나 확인되지 않은 상자에 대한 응답으로 재귀 적으로 하위 트리를 전환하기위한 코드가 있습니다 ( treeNodesChanged 방법).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top