swing:tree
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
swing:tree [2015/05/17 16:57] – created gthanos | swing:tree [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 7: | Line 7: | ||
Όπως φαίνεται στο παραπάνω σχήμα ένα Component τύπου //JTree// απεικονίζει τα δεδομένα του κατακόρυφα ξεκινώντας από ένα κόμβο που ονομάζεται ρίζα του δένδρου και κάθε γραμμή του δένδρου περιέχει μόνο ένα κόμβο. Ένας κόμβος μπορεί να έχει ένα ή περισσότερα παιδιά (//branch node//) ή όχι (//leaf node//). Ένας κόμβος μπορεί να προσδιοριστεί μέσα από το [[http:// | Όπως φαίνεται στο παραπάνω σχήμα ένα Component τύπου //JTree// απεικονίζει τα δεδομένα του κατακόρυφα ξεκινώντας από ένα κόμβο που ονομάζεται ρίζα του δένδρου και κάθε γραμμή του δένδρου περιέχει μόνο ένα κόμβο. Ένας κόμβος μπορεί να έχει ένα ή περισσότερα παιδιά (//branch node//) ή όχι (//leaf node//). Ένας κόμβος μπορεί να προσδιοριστεί μέσα από το [[http:// | ||
- | Μπορείτε να δείτε το [[swing: | + | Μπορείτε να δείτε το [[swing: |
+ | ===== Δημιουργία του δένδρου ===== | ||
+ | |||
+ | Κάθε δένδρο είναι ένα αντικείμενο της κλάσης [[http:// | ||
+ | |||
+ | <code java> | ||
+ | void insert(MutableTreeNode child, int index) | ||
+ | //Adds child to the receiver at index. | ||
+ | |||
+ | void remove(int index) | ||
+ | //Removes the child at index from the receiver. | ||
+ | |||
+ | void remove(MutableTreeNode node) | ||
+ | //Removes node from the receiver. | ||
+ | |||
+ | void removeFromParent() | ||
+ | //Removes the receiver from its parent. | ||
+ | |||
+ | void setParent(MutableTreeNode newParent) | ||
+ | //Sets the parent of the receiver to newParent. | ||
+ | |||
+ | void setUserObject(Object object) | ||
+ | Resets the user object of the receiver to object. | ||
+ | </ | ||
+ | |||
+ | Από τις παραπάνω μεθόδους είναι προφανές ότι σε ένα κόμβο μπορείτε να προσθέσετε άλλους κόμβους ή να αφαιρέσετε κόμβους ή να μετακινήσετε κόμβους. Ένας απλός τρόπος ώστε οι κόμβοι σας να υλοποιούν το συγκεκριμένο interface είναι να ανήκουν στην κλάση [[http:// | ||
+ | |||
+ | <code java> | ||
+ | DefaultMutableTreeNode top = | ||
+ | new DefaultMutableTreeNode(" | ||
+ | createNodes(top); | ||
+ | |||
+ | //Create a tree that allows one selection at a time. | ||
+ | tree = new JTree(top); | ||
+ | tree.setEditable(true); | ||
+ | tree.getSelectionModel().setSelectionMode | ||
+ | (TreeSelectionModel.SINGLE_TREE_SELECTION); | ||
+ | </ | ||
+ | |||
+ | Ο παραπάνω κώδικας δημιουργεί το στοιχείο της ρίζας με τον όνομα //top// και με βάση αυτό δημιουργεί και τα υπόλοιπα αντικείμενα μέσω της μεθόδου '' | ||
+ | <code java> | ||
+ | tree.setEditable(true); | ||
+ | tree.getSelectionModel().setSelectionMode | ||
+ | (TreeSelectionModel.SINGLE_TREE_SELECTION); | ||
+ | </ | ||
+ | |||
+ | Οι επιλογές που έχετε αναφορικά με τον αριθμό των κόμβων που μπορείτε να επιλέξετε είναι οι παρακάτω: | ||
+ | <code java> | ||
+ | static int CONTIGUOUS_TREE_SELECTION | ||
+ | // | ||
+ | static int DISCONTIGUOUS_TREE_SELECTION | ||
+ | // | ||
+ | static int SINGLE_TREE_SELECTION | ||
+ | //Μόνο ένας κόμβος μπορεί να επιλεγεί κάθε φορά. | ||
+ | </ | ||
+ | |||
+ | Παρακάτω δίνεται ένα τμήμα της μεθόδου // | ||
+ | <code java> | ||
+ | private void createNodes(DefaultMutableTreeNode top) { | ||
+ | DefaultMutableTreeNode category = null; | ||
+ | DefaultMutableTreeNode book = null; | ||
+ | |||
+ | category = new DefaultMutableTreeNode(" | ||
+ | top.add(category); | ||
+ | |||
+ | //original Tutorial | ||
+ | book = new DefaultMutableTreeNode(new BookInfo | ||
+ | ("The Java Tutorial: A Short Course on the Basics", | ||
+ | " | ||
+ | category.add(book); | ||
+ | |||
+ | //Tutorial Continued | ||
+ | book = new DefaultMutableTreeNode(new BookInfo | ||
+ | ("The Java Tutorial Continued: The Rest of the JDK", | ||
+ | " | ||
+ | category.add(book); | ||
+ | |||
+ | //JFC Swing Tutorial | ||
+ | book = new DefaultMutableTreeNode(new BookInfo | ||
+ | ("The JFC Swing Tutorial: A Guide to Constructing GUIs", | ||
+ | " | ||
+ | category.add(book); | ||
+ | | ||
+ | .... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Από τον παρακάτω κατασκευαστή της κλάσης [[http:// | ||
+ | <code java> | ||
+ | public DefaultMutableTreeNode(Object userObject); | ||
+ | </ | ||
+ | Έτσι στη μέθοδο createNodes αποθηκεύονται Strings, αν πρόκειται για κόμβους που αναφέρονται στις κατηγορίες των βιβλίων ή αντικείμενα της κλάσης // | ||
+ | <code java> | ||
+ | public Object getUserObject() | ||
+ | </ | ||
+ | Σε αυτή την περίπτωση θα χρειαστείτε να γνωρίζετε την κλάση του αντικειμένου το οποίο επιστρέφει η παραπάνω μέθοδος και να εφαρμόσετε κατάλληλο typecasting. | ||
+ | |||
+ | ==== Ανταποκρινόμενοι στα events ενός δένδρου ==== | ||
+ | |||
+ | Ένα δένδρο μπορεί να παράγει δύο τύπους //events//: | ||
+ | * **[[http:// | ||
+ | * **[[http:// | ||
+ | |||
+ | === TreeSelectionEvents === | ||
+ | |||
+ | Σε όλα τα events που συνδέονται με ένα αντικείμενο μπορείτε να πάρετε το αντικείμενο το οποίο συνδέεται με το event μέσα από την μέθοδο '' | ||
+ | |||
+ | <code java> | ||
+ | Object | ||
+ | //Returns a copy of the receiver, but with the source being newSource. | ||
+ | |||
+ | TreePath | ||
+ | //Returns the current lead path. | ||
+ | |||
+ | TreePath | ||
+ | //Returns the path that was previously the lead path. | ||
+ | |||
+ | TreePath | ||
+ | //Returns the first path element. | ||
+ | |||
+ | TreePath[] | ||
+ | //Returns the paths that have been added or removed from the selection. | ||
+ | |||
+ | boolean | ||
+ | //Returns whether the path identified by getPath was added to the selection. | ||
+ | |||
+ | boolean | ||
+ | //Returns whether the path at getPaths()[index] was added to the selection. | ||
+ | |||
+ | boolean | ||
+ | //Returns whether the specified path was added to the selection. | ||
+ | </ | ||
+ | |||
+ | Στο δένδρο του τρέχοντος παραδείγματος μας που υποστηρίζει το μοντέλο επιλογής κόμβων '' | ||
+ | |||
+ | Αντίστοιχα, | ||
+ | <code java> | ||
+ | void valueChanged(TreeSelectionEvent e) | ||
+ | Called whenever the value of the selection changes. | ||
+ | </ | ||
+ | |||
+ | === TreeModelEvents === | ||
+ | |||
+ | Τα events [[http:// | ||
+ | |||
+ | <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. | ||
+ | </ | ||
+ | |||
+ | ==== Αλλάζοντας τα εικονίδια και την εμφάνιση στους κόμβους ενός δένδρου ==== | ||
+ | |||
+ | Ένα από τα βασικά πράγματα που πιθανόν θα χρειαστείτε είναι να μεταβάλλεται την εμφάνιση των κόμβων ενός δένδρου βάζοντας διαφορετικά εικονίδια για τους κόμβους που είναι φύλλα, για τους κόμβους που δεν είναι φύλλα, αλλά είναι επιλεγμένοι και ανοιχτοί ή για τους κόμβους που είναι κλειστοί. Για να το κάνετε αυτό θα χρειαστείτε ένα αντικείμενο που υλοποιεί το interface [[http:// | ||
+ | <code java> | ||
+ | DefaultTreeCellRenderer tRenderer = | ||
+ | new DefaultTreeCellRenderer(); | ||
+ | ImageIcon folderIcon = new ImageIcon( System.getProperty(" | ||
+ | tRenderer.setLeafIcon( folderIcon ); | ||
+ | tRenderer.setClosedIcon( folderIcon ); | ||
+ | tRenderer.setOpenIcon( folderIcon ); | ||
+ | tRenderer.setTextSelectionColor(Color.RED); | ||
+ | tree.setCellRenderer(tRenderer); | ||
+ | </ | ||
+ | |||
+ | | Προηγούμενο: | ||
- |
swing/tree.1431881835.txt.gz · Last modified: 2015/05/17 15:57 (external edit)