JTree met vakjes

stemmen
12

Ik moet vakjes toe te voegen aan een JTree. Een aangepaste TreeCellRenderer / TreeCellEditor lijkt de juiste aanpak. Tot nu toe gebruikte ik de CheckBoxNodeRenderer aanpak in deze webpagina . Het werkt OK, behalve voor twee dingen:

  1. er is extra witruimte boven + onder de checkbox; Ik wil graag het hetzelfde als een gewone JTree houden.
  2. Ik wil graag een onderscheid te maken tussen klikken op het vakje zelf (die moet proberen om de checkbox uit te schakelen) en te klikken op de tekst in verband met de checkbox (die moet toelaten een evenement luisteraar dit interpreteren als klikken op de corresponderende boom knooppunt en de nodige stappen is gepast)

is er een manier om deze dingen te doen? Ik keek rond voor JTrees met vakjes, kan niet veel vinden. Jide ziet er goed uit, maar ik moet gratis open-source software (GPL is niet ok, LGPL is ok) in dit geval. (Of maak mijn eigen checkbox boom)

De vraag is gesteld op 03/08/2009 om 17:06
bron van user
In andere talen...                            


4 antwoorden

stemmen
7

Zoals voor # 2, zou u een paneel de redactie / renderer, en voeg een label, samen met de checkbox - het etiket zou de tekst, en het selectievakje niet zou hebben de tekst toegevoegd.

antwoordde op 03/08/2009 om 18:00
bron van user

stemmen
4

per @aperkins suggestie is dit wat ik uiteindelijk doen in de TableCellRenderer, lijkt goed te werken:

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

De toetsen voor het wegwerken van ongewenste ruimte in de marge lijkt te zijn (a) dat JCheckBox.setMargin () om het selectievakje marge te verminderen, en (b) met behulp van een BorderLayout voor JPanel.

antwoordde op 03/08/2009 om 20:35
bron van user

stemmen
9

Ik weet dat deze vraag is al beantwoord, maar ik wil gewoon een aantal punten te wissen:

1) jide Common Layer is dual-licentie (GPL met classpath uitzondering en gratis commerciële licentie). Dit betekent dat u de Algemene Layer Project kunt gebruiken zonder problemen met licenties. Kijk dan op de volgende link om te bevestigen: http://www.jidesoft.com/products/oss.htm . Het gemeenschappelijk Layer bevat een implementatie van een controleerbare JTree (com.jidesoft.swing.CheckBoxTree).

2) Er is een blog dateert uit 2005 van de Meester zelf, Santhosh Kumar, waar hij uitlegt hoe je een JTree met vakjes aan de eisen die u noemde implementeren: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Het is de moeite lezen, naar mijn mening.

antwoordde op 20/02/2012 om 13:16
bron van user

stemmen
2

Ik heb een standalone vrijgegeven Swing Checkbox Tree project, verkrijgbaar bij Maven Central als org.scijava:swing-checkbox-tree.

Het pakket is gebaseerd op John Zukowski's CheckBox Node Boom Sample code. Het is BSD-2-licentie zonder afhankelijkheden.

Hiermee mengen en matchen van DefaultMutableTreeNodeen CheckBoxNodeDataknooppunttypen. Het laat ook selectievakje knooppunten als niet-leaf nodes.

Met betrekking tot de vraag van de kwestie # 1: Ik heb het niet getest op alle platforms, maar op mijn OS X-systemen, de CheckBoxNodeDataknooppunten zijn precies dezelfde hoogte in pixels als de DefaultMutableTreeNodeknooppunten.

Wat betreft de vraag emissiepercentage # 2: het gebruikt een JCheckBox+ JLabelin een JPanel(zoals aperkins suggereert) om tussen de pagina een vakje (controleren / uncheck een knoop) versus een label (een knooppunt selecteren).

Voorbeeld gebruiksmogelijkheden:

Het laatste voorbeeld heeft ook coderen voor recursief schakelen subbomen reactie dozen worden in- of uitgeschakeld (zie treeNodesChangedmethode).

antwoordde op 12/10/2012 om 20:49
bron van user

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