swing:tree

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
swing:tree [2015/05/17 18:21]
gthanos [Δημιουργία του δένδρου]
swing:tree [2016/02/26 11:15] (current)
Line 52: Line 52:
   tree.getSelectionModel().setSelectionMode   tree.getSelectionModel().setSelectionMode
       (TreeSelectionModel.SINGLE_TREE_SELECTION);​       (TreeSelectionModel.SINGLE_TREE_SELECTION);​
 +</​code>​
 +
 +Οι επιλογές που έχετε αναφορικά με τον αριθμό των κόμβων που μπορείτε να επιλέξετε είναι οι παρακάτω:​
 +<code java>
 +static int CONTIGUOUS_TREE_SELECTION
 +//​Πολλαπλοί συνεχόμενοι κόμβοι
 +static int DISCONTIGUOUS_TREE_SELECTION
 +//​Πολλαπλοί κόμβοι,​ όχι απαραίτητα συνεχόμενοι
 +static int SINGLE_TREE_SELECTION
 +//Μόνο ένας κόμβος μπορεί να επιλεγεί κάθε φορά.
 </​code>​ </​code>​
  
Line 100: Line 110:
   * **[[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeSelectionEvent.html|TreeSelectionEvent]]:​** events που συνδέονται με επιλογή κόμβων του δένδρου. Τα events αυτά λαμβάνονται μέσα από ένα αντικείμενο που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeSelectionListener.html|TreeSelectionListener]].   * **[[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeSelectionEvent.html|TreeSelectionEvent]]:​** events που συνδέονται με επιλογή κόμβων του δένδρου. Τα events αυτά λαμβάνονται μέσα από ένα αντικείμενο που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeSelectionListener.html|TreeSelectionListener]].
   * **[[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelEvent.html|TreeModelEvent]]:​** events που συνδέονται με μεταβολή της δομής του δένδρου. Τα events αυτά λαμβάνονται μέσα από ένα αντικείμενο που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelListener.html|TreeModelListener]].   * **[[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelEvent.html|TreeModelEvent]]:​** events που συνδέονται με μεταβολή της δομής του δένδρου. Τα events αυτά λαμβάνονται μέσα από ένα αντικείμενο που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelListener.html|TreeModelListener]].
 +
 +=== TreeSelectionEvents ===
 +
 +Σε όλα τα events που συνδέονται με ένα αντικείμενο μπορείτε να πάρετε το αντικείμενο το οποίο συνδέεται με το event μέσα από την μέθοδο ''​public Object getSource()''​ της κλάσης [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​util/​EventObject.html|EventObject]]. Εκτός της παραπάνω μεθόδου,​ οι μέθοδοι που υποστηρίζει κάθε event αυτού του τύπου είναι τα εξής:
 +
 +<code java>
 +Object ​ cloneWithSource(Object newSource)
 +//Returns a copy of the receiver, but with the source being newSource.
 +
 +TreePath ​ getNewLeadSelectionPath()
 +//Returns the current lead path.
 +
 +TreePath ​ getOldLeadSelectionPath()
 +//Returns the path that was previously the lead path.
 +
 +TreePath ​ getPath()
 +//Returns the first path element.
 +
 +TreePath[] ​ getPaths()
 +//Returns the paths that have been added or removed from the selection.
 +
 +boolean ​  ​isAddedPath()
 +//Returns whether the path identified by getPath was added to the selection.
 +
 +boolean ​  ​isAddedPath(int index)
 +//Returns whether the path at getPaths()[index] was added to the selection.
 +
 +boolean ​  ​isAddedPath(TreePath path)
 +//Returns whether the specified path was added to the selection.
 +</​code>​
 +
 +Στο δένδρο του τρέχοντος παραδείγματος μας που υποστηρίζει το μοντέλο επιλογής κόμβων ''​SINGLE_TREE_SELECTION''​ η μόνη μέθοδος που σας χρειάζεται είναι η getPath() από την οποία λαμβάνεται το [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​tree/​TreePath.html|TreePath]] του κόμβου που επιλέξατε. ​
 +
 +Αντίστοιχα,​ το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeSelectionListener.html|TreeSelectionListener]] υποστηρίζει μόνο μία μέθοδο η οποία καλείται κάθε φορά που επιλέγεται νέος κόμβος,​ όπως φαίνεται παρακάτω.
 +<code java>
 +void valueChanged(TreeSelectionEvent e)
 +Called whenever the value of the selection changes.
 +</​code>​
 +
 +=== TreeModelEvents ===
 +
 +Τα events [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelEvent.html|αυτού του τύπου]] δημιουργούνται όταν έχουμε μεταβολή στην δομή του δένδρου. Σε αυτή την περίπτωση θα χρειαστείτε μία κλάση που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​event/​TreeModelListener.html|TreeModelListener]] για να λάβετε τις μεταβολές στη δομή του δένδρου. Ο συγκεκριμένος Listener ορίζει τις παρακάτω μεθόδους.
 +
 +<code java>
 +void treeNodesChanged(TreeModelEvent e)
 +//Invoked after a node (or a set of siblings) has changed in some way.
 +
 +void treeNodesInserted(TreeModelEvent e)
 +//Invoked after nodes have been inserted into the tree.
 +
 +void treeNodesRemoved(TreeModelEvent e)
 +//Invoked after nodes have been removed from the tree.
 +
 +void treeStructureChanged(TreeModelEvent e)
 +//Invoked after the tree has drastically changed structure from a given node down.
 +</​code>​
 +
 +==== Αλλάζοντας τα εικονίδια και την εμφάνιση στους κόμβους ενός δένδρου ====
 +
 +Ένα από τα βασικά πράγματα που πιθανόν θα χρειαστείτε είναι να μεταβάλλεται την εμφάνιση των κόμβων ενός δένδρου βάζοντας διαφορετικά εικονίδια για τους κόμβους που είναι φύλλα, για τους κόμβους που δεν είναι φύλλα, αλλά είναι επιλεγμένοι και ανοιχτοί ή για τους κόμβους που είναι κλειστοί. Για να το κάνετε αυτό θα χρειαστείτε ένα αντικείμενο που υλοποιεί το interface [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​tree/​TreeCellRenderer.html|TreeCellRenderer]]. Η πιο απλή επιλογή είναι να χρησιμοποιήσετε την κλάση [[http://​docs.oracle.com/​javase/​7/​docs/​api/​javax/​swing/​tree/​DefaultTreeCellRenderer.html|DefaultTreeCellRenderer]]. Το παρακάτω απόσπασμα είναι ενδεικτικό για το πως μπορείτε να αλλάξετε τα εικονίδια των κόμβων σε κάθε μία από τις παραπάνω κατηγορίες.
 +<code java>
 +  DefaultTreeCellRenderer tRenderer =  ​
 +        new DefaultTreeCellRenderer();​
 +  ImageIcon folderIcon = new ImageIcon( System.getProperty("​user.dir"​)+"/​icons/​small/​folder.png"​ );
 +  tRenderer.setLeafIcon( folderIcon );
 +  tRenderer.setClosedIcon( folderIcon );
 +  tRenderer.setOpenIcon( folderIcon );
 +  tRenderer.setTextSelectionColor(Color.RED);​
 +  tree.setCellRenderer(tRenderer);​
 +</​code>​
  
  
  
    
swing/tree.1431886910.txt.gz · Last modified: 2016/02/26 11:15 (external edit)