JTree με πλαίσια ελέγχου

ψήφοι
12

Θα πρέπει να προσθέσετε πλαίσια ελέγχου σε JTree. Ένα έθιμο TreeCellRenderer / TreeCellEditor φαίνεται σαν η σωστή προσέγγιση. Μέχρι τώρα χρησιμοποίησα την προσέγγιση CheckBoxNodeRenderer σε αυτή την ιστοσελίδα . Λειτουργεί ΟΚ, εκτός από δύο πράγματα:

  1. υπάρχει επιπλέον κενά πάνω από + κάτω από το πλαίσιο ελέγχου? Θα ήθελα να το κρατήσει το ίδιο με ένα κανονικό JTree.
  2. Θα ήθελα να γίνει διάκριση μεταξύ κλικ στο ίδιο το πλαίσιο ελέγχου (η οποία θα πρέπει να προσπαθήσετε να αλλάξετε το πλαίσιο ελέγχου) και κάνοντας κλικ στο κείμενο που σχετίζεται με το πλαίσιο ελέγχου (η οποία θα πρέπει να επιτρέψει σε έναν ακροατή εκδήλωση για να ερμηνεύσει αυτό ως κλικ στο αντίστοιχο κόμβο του δένδρου και να λάβει οποιαδήποτε δράση είναι σκόπιμο)

Είναι ένας τρόπος για να κάνει αυτά τα πράγματα εκεί; Κοίταξα γύρω μου για JTrees με πλαίσια ελέγχου, δεν μπορεί να βρει πολλά. Jide φαίνεται καλό, αλλά εγώ πρέπει να χρησιμοποιούν το ελεύθερο λογισμικό ανοιχτού κώδικα (GPL δεν είναι εντάξει, LGPL είναι εντάξει) σε αυτή την περίπτωση. (Ή να δημιουργήσετε το δικό μου δέντρο κουτάκι)

Δημοσιεύθηκε 03/08/2009 στις 17:06
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
7

Όσο για το # 2, θα μπορούσατε να κάνετε ένα πίνακα είναι ο συντάκτης / renderer, και να προσθέσετε μια ετικέτα μαζί με το πλαίσιο ελέγχου - η ετικέτα θα είναι το κείμενο, και το πλαίσιο ελέγχου δεν θα έχει το κείμενο που προστίθεται σε αυτό.

Απαντήθηκε 03/08/2009 στις 18:00
πηγή χρήστη

ψήφοι
4

ανά πρόταση @aperkins αυτό είναι αυτό που κατέληξε να κάνει το TableCellRenderer, φαίνεται να λειτουργεί καλά:

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

Τα κλειδιά για να απαλλαγούμε από τα ανεπιθύμητα χώρο στο περιθώριο φαίνεται να είναι (α) καλώντας JCheckBox.setMargin () για να μειωθεί το περιθώριο πλαίσιο ελέγχου, και (β) χρησιμοποιώντας μια BorderLayout για JPanel.

Απαντήθηκε 03/08/2009 στις 20:35
πηγή χρήστη

ψήφοι
9

Ξέρω ότι αυτή η ερώτηση έχει απαντηθεί ήδη, αλλά εγώ απλά θέλετε να καταργήσετε κάποια σημεία:

1) Jide Κοινή Layer είναι διπλής άδεια (GPL με classpath εξαίρεση και χωρίς εμπορική άδεια). Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε την κοινή Έργου Layer χωρίς προβλήματα αδειοδότησης. Παρακαλώ ελέγξτε τον παρακάτω σύνδεσμο για να επιβεβαιώσετε: http://www.jidesoft.com/products/oss.htm . Η κοινή Layer περιλαμβάνει την εφαρμογή ενός ελεγχθούν JTree (com.jidesoft.swing.CheckBoxTree).

2) Υπάρχει ένα blog που χρονολογείται από το 2005 από τον ίδιο τον Δάσκαλο, Santhosh Kumar, όπου εξηγεί πώς να εφαρμόσει μια JTree με πλαίσια ελέγχου με τις απαιτήσεις που αναφέρονται: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Αξίζει να το διαβάσετε, κατά τη γνώμη μου.

Απαντήθηκε 20/02/2012 στις 13:16
πηγή χρήστη

ψήφοι
2

Έχω κυκλοφορήσει ένα αυτόνομο Δέντρο Swing Πλαίσιο ελέγχου του έργου, που διατίθενται από Maven Central, όπως org.scijava:swing-checkbox-tree.

Το πακέτο βασίζεται σε John Zukowski του δείγματος CheckBox Κόμβος Δέντρο κώδικα. Είναι BSD-2-άδεια, χωρίς εξαρτήσεις.

Επιτρέπει μίξη και το ταίριασμα του DefaultMutableTreeNodeκαι CheckBoxNodeDataτύπους κόμβων. Επιτρέπει επίσης να ελέγξετε κόμβους κουτί ως κόμβοι μη φύλλα.

Όσον αφορά το ζήτημα της έκδοσης # 1: Δεν είχα δοκιμάσει σε όλες τις πλατφόρμες, αλλά σε συστήματα OS X μου, οι CheckBoxNodeDataκόμβοι είναι ακριβώς το ίδιο ύψος σε pixel όπως οι DefaultMutableTreeNodeκόμβοι.

Όσον αφορά το ζήτημα της έκδοσης # 2: χρησιμοποιεί ένα JCheckBox+ JLabelσε ένα JPanel(όπως aperkins προτείνει) να διαφοροποιήσει μεταξύ κλικ σε ένα πλαίσιο ελέγχου (για να επιλέξετε / αποεπιλέξετε έναν κόμβο) σε σχέση με μια ετικέτα (για να επιλέξετε ένα κόμβο).

Παράδειγμα χρήσεις:

Το τελευταίο παράδειγμα έχει επίσης κώδικας για αναδρομικά εναλλαγή υποδένδρων σε απόκριση προς κιβώτια ελέγχεται ή ανεξέλεγκτες (βλέπε τη treeNodesChangedμέθοδο).

Απαντήθηκε 12/10/2012 στις 20:49
πηγή χρήστη

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