JTree med boksene

stemmer
13

Jeg må legge til boksene til en JTree. En tilpasset TreeCellRenderer / TreeCellEditor virker som den rette tilnærmingen. Så langt har jeg brukt den CheckBoxNodeRenderer tilnærming i denne nettsiden . Det fungerer OK med unntak av to ting:

  1. det er ekstra mellomrom over + under boksen; Jeg ønsker å holde det samme som en vanlig JTree.
  2. Jeg ønsker å skille mellom å klikke på boksen i seg selv (som skal forsøke å slå boksen) og klikke på teksten knyttet til boksen (som bør gi en hendelse lytteren å tolke dette som å klikke på den tilsvarende tre node og ta hva handling er hensiktsmessig)

er det en måte å gjøre disse tingene? Jeg kikket rundt for JTrees med boksene, finner ikke mye. Jide ser bra ut, men jeg trenger å bruke gratis programvare med åpen kildekode (GPL er ikke ok, LGPL er ok) i dette tilfellet. (Eller lage min egen boksen treet)

Publisert på 03/08/2009 klokken 16:06
kilden bruker
På andre språk...                            


4 svar

stemmer
8

Som for # 2, kan du gjøre et panel være redaktør / renderer, og legge til en etikett sammen med boksen - etiketten ville være teksten, og i boksen ville ikke ha teksten lagt til.

Svarte 03/08/2009 kl. 17:00
kilden bruker

stemmer
4

per @aperkins forslag dette er hva jeg endte opp med å gjøre i TableCellRenderer, synes det å fungere godt:

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

Tastene for å bli kvitt uønsket plass i marginene ser ut til å være (a) å kalle JCheckBox.setMargin () for å redusere boksen margin, og (b) med en BorderLayout for JPanel.

Svarte 03/08/2009 kl. 19:35
kilden bruker

stemmer
9

Jeg vet at dette spørsmålet har blitt besvart allerede, men jeg vil bare fjerne noen punkter:

1) Jide Felles Layer er dual-lisensiert (GPL CLASSPATH unntak og gratis kommersiell lisens). Dette betyr at du kan bruke den felles Layer prosjektet uten lisensiering problemer. Vennligst sjekk følgende link for å bekrefte: http://www.jidesoft.com/products/oss.htm . Den felles lag omfatter en implementering av en avmerkes JTree (com.jidesoft.swing.CheckBoxTree).

2) Det er en blogg datert fra 2005 fra Mesteren selv, Santhosh Kumar, der han forklarer hvordan å implementere en JTree med boksene med kravene du nevnte: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Det er verdt å lese den, etter min mening.

Svarte 20/02/2012 kl. 12:16
kilden bruker

stemmer
2

Jeg har gitt ut en frittstående Swing Checkbox Tre prosjekt, tilgjengelig fra Maven Central som org.scijava:swing-checkbox-tree.

Pakken er basert på John Zukowski sin avmerkingsbokser Node Tre Eksempelkode. Det er BSD-to-lisensiert med ingen avhengigheter.

Det tillater blanding og matching av DefaultMutableTreeNodeog CheckBoxNodeDatanodetyper. Den gjør det også i boksen noder som ikke-bladnoder.

Når det gjelder spørsmålet utgave # 1: Jeg hadde ikke teste på alle plattformer, men på min OS X-systemer, de CheckBoxNodeDatanodene er nøyaktig samme høyde i piksler som de DefaultMutableTreeNodenoder.

Når det gjelder spørsmålet utgave # 2: den bruker en JCheckBox+ JLabeli en JPanel(som aperkins antyder) å skille mellom å klikke på en boksen (for å sjekke / fjerne merket en node) versus en etikett (for å velge en node).

Eksempler på bruk:

Den sistnevnte eksempel har også kode for rekursivt å veksle undertrær som reaksjon på bokser som blir kontrollert eller ukontrollert (se den treeNodesChangedmetode).

Svarte 12/10/2012 kl. 19:49
kilden bruker

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