JTree z wyboru

głosy
12

Trzeba dodać pola wyboru do JTree. Niestandardowy TreeCellRenderer / TreeCellEditor wydaje się właściwym podejściem. Do tej pory używałem podejście CheckBoxNodeRenderer w tej stronie . Działa OK, z wyjątkiem dwóch rzeczy:

  1. istnieje dodatkowe spacje powyżej + poniżej pola wyboru; Chciałbym zachować to samo jak zwykły JTree.
  2. Chciałbym rozróżnić kliknięciu samego wyboru (co ma próbować przełączyć wyboru) i kliknięcie na tekście związanym z wyboru (co powinno umożliwić detektor zdarzeń zinterpretować to jako kliknięcie na odpowiednim węźle drzewa i podejmują wszelkie działania jest odpowiednie)

czy jest jakiś sposób, aby robić te rzeczy? Rozejrzałem się za JTrees z wyboru, nie może znaleźć wiele. Jide wygląda dobrze, ale muszę korzystać z darmowego oprogramowania open-source (GPL nie jest ok, LGPL jest ok) w tym przypadku. (Lub utworzyć własne drzewo checkbox)

Utwórz 03/08/2009 o 17:06
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
7

Co do # 2, można zrobić panel być redaktorem / renderer i dodać etykietę wraz z wyboru - etykieta będzie tekst, a pole nie miałby tekst dodany.

Odpowiedział 03/08/2009 o 18:00
źródło użytkownik

głosy
4

za @aperkins sugestią jest to, co skończyło się robi w TableCellRenderer, wydaje się działać dobrze:

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

Klucze do pozbycia się niechcianego miejsca na marginesie wydaje się być (a) powołanie JCheckBox.setMargin (), aby zmniejszyć margines pole wyboru, oraz (b) przy użyciu BorderLayout na JPanel.

Odpowiedział 03/08/2009 o 20:35
źródło użytkownik

głosy
9

Wiem, że to pytanie zostało już odpowiedział, ale po prostu chcę, aby usunąć kilka punktów:

1) Jide Common Layer to dual-licencjonowany (GPL ze ścieżki klasy wyjątku i wolnej licencji komercyjnej). Oznacza to, że można wykorzystywać wspólne warstwy projektu bez żadnych problemów licencyjnych. Proszę sprawdzić poniższy link, aby potwierdzić wybór: http://www.jidesoft.com/products/oss.htm . Wspólna warstwa obejmuje realizację Rejestrowalne JTree (com.jidesoft.swing.CheckBoxTree).

2) Jest to blog datowane od 2005 roku od samego Mistrza, Santhosh Kumar, gdzie wyjaśniono, jak zaimplementować JTree z wyboru z wymaganiami Państwo wymienić: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Warto go przeczytać, moim zdaniem.

Odpowiedział 20/02/2012 o 13:16
źródło użytkownik

głosy
2

I wydali autonomicznego Drzewo Swing CheckBox projektu, dostępną jako Maven Central org.scijava:swing-checkbox-tree.

Pakiet jest oparty na Jana Żukowskiego za CheckBox węzła drzewa Przykładowy kod. Jest to 2-BSD licencjonowany bez zależności.

Pozwala to mieszanie i dopasowywanie DefaultMutableTreeNodei CheckBoxNodeDatatypów węzłów. Pozwala także sprawdzić węzły Pole jako non-węzłów liściowych.

Odnosząc się do zagadnienia numerze # 1: Nie testowałem na wszystkich platformach, ale na moich systemów OS X, CheckBoxNodeDatawęzły są dokładnie takie same jak w pikselach wysokość tych DefaultMutableTreeNodewęzłów.

Odnosząc się do zagadnienia numerze # 2: używa JCheckBox+ JLabelw trybie A JPanel(jak aperkins sugeruje), aby odróżnić kliknięcie pola wyboru (aby zaznaczyć / odznaczyć węzła) w zależności od etykiety (wybierz węzeł).

Przykłady użycia:

Ten ostatni przykład jest również kod rekurencyjnie poddrzew przełączania w odpowiedzi na polach są sprawdzane i niekontrolowany (patrz treeNodesChangedmetody).

Odpowiedział 12/10/2012 o 20:49
źródło użytkownik

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