JTree mit Kontrollkästchen

stimmen
12

Ich muß Kontrollkästchen in dem JTree. Ein benutzerdefinierter TreeCellRenderer / TreeCellEditor scheint der richtige Ansatz. Bisher habe ich den CheckBoxNodeRenderer Ansatz auf dieser Webseite . Es funktioniert OK mit Ausnahme von zwei Dingen:

  1. gibt es zusätzliche Leerzeichen über + unter dem Kontrollkästchen; Ich möchte es das gleiche wie eine regelmäßige JTree halten.
  2. Ich möchte zwischen einem Klick auf das Kästchen unterscheiden sich (die versuchen soll, das Kontrollkästchen wechseln), und klicken Sie auf den Text mit der Checkbox zugeordnet (die ein Ereignis-Listener diese interpretieren, wie Sie auf den entsprechenden Baumknoten und alle Maßnahmen ergreifen lassen sollte Ist angemessen)

gibt es eine Möglichkeit, diese Dinge zu tun? Ich sah mich um für JTrees mit Kontrollkästchen kann nicht viel finden. JIDE sieht gut aus, aber ich brauche freie Open-Source-Software (GPL nicht ok ist, LGPL ist ok) in diesem Fall. (Oder mein eigenes Kontrollkästchen Baum erstellen)

Veröffentlicht am 03/08/2009 um 17:06
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
7

Wie bei # 2, könnten Sie ein Panel die Editor / Renderer machen, und ein Etikett zusammen mit dem Kontrollkästchen hinzufügen - das Label der Text sein würde, und das Kontrollkästchen würde es nicht haben den Text eingefügt.

Beantwortet am 03/08/2009 um 18:00
quelle vom benutzer

stimmen
4

pro @aperkins Vorschlag ist es das, was ich am Ende in der Table tun, ist es gut zu funktionieren scheint:

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);

Die Schlüssel für am Rande der unerwünschten Raum loszuwerden scheint zu sein, (a) Aufruf JCheckBox.setMargin () die Checkbox Marge zu reduzieren, und (b) unter Verwendung eines Border für JPanel.

Beantwortet am 03/08/2009 um 20:35
quelle vom benutzer

stimmen
9

Ich weiß, diese Frage bereits beantwortet wurde, aber ich möchte nur einige Punkte klären:

1) JIDE gemeinsame Schicht ist Dual-Lizenz (GPL mit Classpath Ausnahme und freier kommerzieller Lizenz). Dies bedeutet , dass Sie die Common Layer - Projekt ohne Lizenzprobleme verwenden können. Überprüfen Sie bitte den folgenden Link , um zu bestätigen: http://www.jidesoft.com/products/oss.htm . Die gemeinsame Schicht enthält eine Implementierung eines prüfbaren JTree (com.jidesoft.swing.CheckBoxTree).

2) Es ist ein Blog von 2005 aus dem Master datierte selbst, Santhosh Kumar, wo er erklärt , wie ein JTree mit Kontrollkästchen mit den Anforderungen zu implementieren , die Sie erwähnen: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Es lohnt sich, meiner Meinung nach zu lesen.

Beantwortet am 20/02/2012 um 13:16
quelle vom benutzer

stimmen
2

Ich habe ein eigenständiges freigegebene Swing - Kästchen zum Ankreuzen Baum - Projekt, das von Maven Central als org.scijava:swing-checkbox-tree.

Das Paket basiert auf John Zukowski der CheckBox Knoten Baum Beispielcode. Es ist ohne Abhängigkeiten BSD-2-lizenziert.

Es ermöglicht Mischen und Anpassen von DefaultMutableTreeNodeund CheckBoxNodeDataKnotentypen. Es ermöglicht auch Box - Knoten als Nicht-Blattknoten überprüfen.

In Bezug auf die Ausgabe # Frage 1: Die ich auf allen Plattformen nicht getestet, aber auf meinem OS X - Systemen CheckBoxNodeDataKnoten sind genau die gleiche Höhe in Pixeln als den DefaultMutableTreeNodeKnoten.

In Bezug auf die Ausgabe # Frage 2: ein verwendet JCheckBox+ JLabelin einem JPanel(wie aperkins schon sagt) zwischen einem Klick auf einem Kontrollkästchen (aktivieren / deaktivieren Sie einen Knoten) im Vergleich zu einem Etikett (wählen Sie einen Knoten) zu unterscheiden.

Beispiele für den Gebrauch:

Das letzteres Beispiel hat auch Code zum rekursiven Unterbäumen in Reaktion auf Schachteln werden aktiviert oder deaktiviert (siehe die Hin- und Herschalten treeNodesChangedMethode).

Beantwortet am 12/10/2012 um 20:49
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more