Jtree con caselle di controllo

voti
12

Ho bisogno di aggiungere caselle di controllo per un JTree. A TreeCellRenderer custom / TreeCellEditor sembra l'approccio giusto. Finora ho usato l'approccio CheckBoxNodeRenderer in questa pagina web . Funziona bene tranne che per due cose:

  1. c'è ulteriore spazio bianco sopra + sotto la casella di controllo; Mi piacerebbe tenerlo lo stesso di un JTree regolare.
  2. Vorrei distinguere cliccando sulla casella stessa (che dovrebbe tentare di attivare la casella di controllo) e facendo clic sul testo associato alla casella (che dovrebbe consentire un ascoltatore evento interpretare questo come cliccando sul nodo corrispondente ed adottare le misure è appropriato)

c'è un modo per fare queste cose? Mi sono guardato intorno per JTrees con caselle di controllo, non riesce a trovare molto. JIDE sembra buono, ma ho bisogno di usare software libero open-source (GPL non è ok, LGPL è ok) in questo caso. (O creare il mio albero casella di controllo)

È pubblicato 03/08/2009 alle 17:06
fonte dall'utente
In altre lingue...                            


4 risposte

voti
7

Per quanto riguarda i 2 #, si potrebbe fare un pannello di essere l'editor / renderer, e aggiungere un'etichetta con la casella di controllo - l'etichetta sarebbe il testo e la casella di controllo non si avrebbe il testo aggiunto ad esso.

Risposto il 03/08/2009 a 18:00
fonte dall'utente

voti
4

per @aperkins suggerimento questo è quello che ho finito per fare in TableCellRenderer, sembra funzionare bene:

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

Le chiavi per sbarazzarsi di spazio indesiderate a margine sembra essere (a) chiamando JCheckBox.setMargin () per ridurre il margine casella di controllo, e (b) utilizzando un BorderLayout per JPanel.

Risposto il 03/08/2009 a 20:35
fonte dall'utente

voti
9

So che questo problema è stato già risposto, ma voglio solo chiarire alcuni punti:

1) strato JIDE comune è doppia licenza (GPL con l'eccezione classpath e la licenza commerciale gratuito). Ciò significa che è possibile utilizzare il progetto comune di livello, senza problemi di licenza. Si prega di verificare il seguente link per confermare: http://www.jidesoft.com/products/oss.htm . Il livello comune include l'implementazione di un JTree controllabile (com.jidesoft.swing.CheckBoxTree).

2) C'è un blog datato dal 2005 dal Maestro stesso, Santhosh Kumar, in cui spiega come implementare una JTree con caselle di controllo con i requisiti che hai menzionato: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Vale la pena di leggerlo, a mio parere.

Risposto il 20/02/2012 a 13:16
fonte dall'utente

voti
2

Ho rilasciato un autonomo altalena albero Casella di controllo del progetto, disponibile da Maven centrale come org.scijava:swing-checkbox-tree.

Il pacchetto si basa su di John Zukowski Esempio CheckBox nodo della struttura del codice. E 'BSD-2-licenza senza dipendenze.

Permette combinare liberamente DefaultMutableTreeNodee CheckBoxNodeDatatipi di nodi. Permette anche di controllare nodi Box come nodi non foglia.

Per quanto riguarda la questione del numero # 1: Non ho prove su tutte le piattaforme, ma sui miei sistemi OS X, i CheckBoxNodeDatanodi sono esattamente alla stessa altezza in pixel come i DefaultMutableTreeNodenodi.

Per quanto riguarda la questione del numero # 2: utilizza un JCheckBox+ JLabelin un JPanel(come aperkins suggerisce) di distinguere tra cliccando su una casella di controllo (per selezionare / deselezionare un nodo) rispetto un'etichetta (per selezionare un nodo).

usi Esempio:

Quest'ultimo esempio ha anche il codice per commutare in modo ricorsivo sottoalberi in risposta alle scatole essendo selezionata o deselezionata (vedere il treeNodesChangedmetodo).

Risposto il 12/10/2012 a 20:49
fonte dall'utente

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