JTree pomocí zaškrtávacích políček

hlasů
12

Musím se přidat políčka do JTree. Vlastní TreeCellRenderer / TreeCellEditor jeví jako správný přístup. Zatím jsem použil přístup CheckBoxNodeRenderer v této webové stránce . Funguje to OK až na dvě věci:

  1. je tu další bílé znaky nad + níže uvedené políčko; Rád bych, aby to stejné, jako pravidelný JTree.
  2. Rád bych rozlišovat mezi kliknutím na zaškrtávací políčko sám (což by se měla snažit přepínat políčko) a kliknout na text spojené s políčko (což by mělo umožnit posluchač události interpretovat to jako kliknutí na odpovídající uzlu stromu a přijmou veškerá nezbytná opatření je vhodné)

existuje způsob, jak tyto věci dělat? Rozhlédl jsem se po JTrees s zaškrtávací políčka, nemůže najít mnoho. Jide vypadá dobře, ale musím použít bezplatný open-source software (GPL není v pořádku, LGPL je v pořádku), v tomto případě. (Nebo vytvořit vlastní políčko strom)

Položena 03/08/2009 v 17:06
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
7

Pokud jde o # 2, mohli byste udělat panel je editor / renderer, a přidat štítek spolu s zaškrtávací políčko - etiketa by text a zaškrtávací políčko nebude mít text do ní přidat.

Odpovězeno 03/08/2009 v 18:00
zdroj uživatelem

hlasů
4

per @aperkins návrhu je to, co jsem skončil dělat v TableCellRenderer, zdá se, že funguje dobře:

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

Klíče, jak se zbavit nežádoucího prostoru na okrajích se zdá být (a) volání JCheckBox.setMargin () ke snížení políčko marže, a (b) za použití BorderLayout pro JPanel.

Odpovězeno 03/08/2009 v 20:35
zdroj uživatelem

hlasů
9

Vím, že tato otázka byla zodpovězena už, ale já chci vymazat některé body:

1) Jide Společná vrstva je dual-licencí (GPL s výjimkou Classpath a volného komerční licencí). To znamená, že můžete použít projekt společnou vrstvu bez problémů licencí. Zkontrolujte prosím následující odkaz pro potvrzení: http://www.jidesoft.com/products/oss.htm . Společná vrstva obsahuje implementaci kontrolovatelných JTree (com.jidesoft.swing.CheckBoxTree).

2) K dispozici je blog pochází z roku 2005 od mistra sám, Santhosh Kumar, kde se vysvětluje, jak implementovat JTree s rámečky s požadavky jste zmínil: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Je to stojí za přečtení to, podle mého názoru.

Odpovězeno 20/02/2012 v 13:16
zdroj uživatelem

hlasů
2

I vydali samostatný Swing Checkbox Tree projektu, k dispozici od Maven Central, jak je org.scijava:swing-checkbox-tree.

Balíček je založen na Johna Żukowski je CheckBox uzlu Tree Ukázkový kód. Je BSD-2-licencované bez závislostí.

To umožňuje míchání a přizpůsobení DefaultMutableTreeNodea CheckBoxNodeDatatypy uzlů. Umožňuje také zaškrtávací políčko uzly jako non-koncové uzly.

Co se týče otázky čísle # 1: Nechtěl jsem testovat na všech platformách, ale na mé OS X, že CheckBoxNodeDatauzly jsou naprosto stejné výšce v pixelech jako DefaultMutableTreeNodeuzly.

Co se týče otázky je vydání # 2: používá JCheckBox+ JLabelv režimu A JPanel(jako aperkins navrhne) rozlišit kliknutí na políčko (pro kontrolu / zrušte uzlu) v závislosti na štítku (vyberte uzel).

Příklad způsoby použití:

Druhý příklad má také kód pro rekurzivně přepínání podstromy v reakci na krabicích kontrolovaného nebo nekontrolovaná (viz treeNodesChangedmetody).

Odpovězeno 12/10/2012 v 20:49
zdroj uživatelem

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