JTree cu casetele de selectare

voturi
12

Trebuie să adaug casetele de selectare pentru un JTree. Un TreeCellRenderer personalizat / TreeCellEditor pare ca abordarea corectă. Până în prezent , am folosit abordarea CheckBoxNodeRenderer în această pagină web . Acesta funcționează OK cu excepția a două lucruri:

  1. există spații libere suplimentare de mai sus + jos caseta; Aș vrea să-l păstrați la fel ca un JTree regulat.
  2. Aș dori să se facă distincția între un click pe caseta de selectare în sine (care ar trebui să încerce să comuta pe caseta) și făcând clic pe textul asociat cu caseta (care ar trebui să permită un ascultător eveniment să interpreteze acest lucru ca făcând clic pe nodul arborelui corespunzător și să ia orice acțiune Este adecvat)

există o modalitate de a face aceste lucruri? M-am uitat în jur pentru JTrees cu casete de selectare, nu pot găsi de mult. Jide arata bine, dar am nevoie de a utiliza software-ul open-source gratuit (GPL nu este ok, LGPL este OK), în acest caz. (Sau pentru a crea propriul meu copac casetă de selectare)

Întrebat 03/08/2009 la 17:06
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
7

În ceea ce privește # 2, ai putea face un panou să fie editorul / redare, și adăugați o etichetă, împreună cu caseta - eticheta ar fi textul, iar caseta de validare nu ar avea textul adăugat la acesta.

Publicat 03/08/2009 la 18:00
sursa de către utilizator

voturi
4

pentru fiecare sugestie @aperkins acest lucru este ceea ce am ajuns să fac în TableCellRenderer, se pare să funcționeze bine:

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

Tastele pentru a scăpa de spațiu nedorite în marjele pare a fi (a) de asteptare JCheckBox.setMargin () pentru a reduce marja caseta de selectare, și (b) folosind un BorderLayout pentru JPanel.

Publicat 03/08/2009 la 20:35
sursa de către utilizator

voturi
9

Știu că această întrebare a fost deja răspuns, dar eu vreau doar pentru a șterge câteva puncte:

1) Jide Common Layer este dual-licență (GPL , cu excepția classpath și licență comercială liberă). Acest lucru înseamnă că puteți utiliza proiectul comun Layer fără probleme de licențiere. Vă rugăm să verificați link - ul de mai jos pentru a confirma: http://www.jidesoft.com/products/oss.htm . Layer comună include o implementare a unui JTree verificabilă (com.jidesoft.swing.CheckBoxTree).

2) Există un blog datat din 2005 de la Maestrul însuși, Santhosh Kumar, în cazul în care el explică modul în care să pună în aplicare un JTree cu casetele de selectare cu cerințele ați menționat: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Merită citit - o, în opinia mea.

Publicat 20/02/2012 la 13:16
sursa de către utilizator

voturi
2

Am lansat un independent copac Swing Checkbox proiect, disponibil de la Maven Centrală org.scijava:swing-checkbox-tree.

Pachetul se bazeaza pe John Zukowski lui Mostră CheckBox Nod copac cod. Este BSD-2-licențiat fără dependențe.

Acesta permite amestecarea și potrivirea DefaultMutableTreeNodeși CheckBoxNodeDatatipuri de noduri. De asemenea, permite verifica nodurile cutie ca noduri non-frunze.

În ceea ce privește întrebarea problema # 1: Nu am testat pe toate platformele, dar pe sistemele mele OS X, la CheckBoxNodeDatanodurile sunt exact aceeași înălțime în pixeli ca și DefaultMutableTreeNodenodurile.

În ceea ce privește întrebarea problema # 2: se folosește un JCheckBox+ JLabelîntr - un JPanel(așa cum aperkins sugerează) să facă diferența între clic pe o casetă de validare (pentru a verifica / debifați un nod) , comparativ cu o etichetă (pentru a selecta un nod).

Exemplu uzanțele:

Acest din urmă exemplu de realizare are de asemenea , codul pentru basculând recursiv subramificații ca răspuns la cutiile fiind controlate sau neverificată (vezi treeNodesChangedmetoda).

Publicat 12/10/2012 la 20:49
sursa de către utilizator

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