JTREE utilisation de JTree.AccessibleJTree et de setVisible

JTREE utilisation de JTree.AccessibleJTree et de setVisible - Java - Programmation

Marsh Posté le 05-02-2005 à 15:52:49    

:jap: Salut! :jap:  
 
Je cherche actuellement à rendre invisible une partie de l'arbre. (Un peu comme si on déroulait une branche, sauf que là ce serait pour "effacer" plusieurs branche, ou seulement une partie de la branche, certaines feuilles koi)  
 
 
J'ai trouvé que les JComponent.AccessibleJComponent ont une fonction setVisible(boolean b). Et qu'on peut les utiliser dans les JTree.AccessibleJTree . Sauf que je sait pas faire :heink: , et que je ne trouve pas d'exemple :sweat: ... Quelqu'un peut m'aider, ou me dire ou trouver de la doc un peu mieux que les simples API? (j'aime les exemples :p)  
 
Merci beaucoup!!! :bounce:  :bounce:

Reply

Marsh Posté le 05-02-2005 à 15:52:49   

Reply

Marsh Posté le 05-02-2005 à 16:56:12    

Reply

Marsh Posté le 05-02-2005 à 17:32:23    

merci pour ce joli site, je connaissai pas effectivement, et il explique pas mal de chose. Cependant, il répond pas à ma question, enfin j'ai pas trouvé:
 
Comment rendre une feuille invisible? (par exemple) je veux pas vraiment l'effacer, je veux juste la rendre visible ou non...
 
Merci!

Reply

Marsh Posté le 05-02-2005 à 18:48:03    

castrogne > tout ce qui est AccessibleBidule concerne les l'accessibilité pour les handicapés.
 
par contre, j'ai pas compris ton délire, tu veux replier les branche ou dessiner un rectangle blanc à la place ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 05-02-2005 à 20:26:41    

Non, je m'explique:
 
je reprends un projet, qui s'avère assez complexe. Sauf qu'en le prenant, moi je connaissait rien aux jtree... Il s'agit d'un arbre de données d'un certain type (une classe définie au préalable). Ces données sont représentées dans un jtree, et chaque noeud correspond à une instance de cette classe (et pas du tout à un defaultmutabletreenode).  
 
Ce que j'aimerai, c'est que certains de ces éléments n'apparaissent pas dans l'arbre. Mais comme c'est fait pour le moment, ils sont inséparables! Donc je veux "tout simplement" en rendre une partie invisible. Non pas replié, mais vraiment invisible. Si j'ai bien tout compris, ça doit se passer dans le treeModel, ça doit être par là que je dois dire ce qui apparait ou non, mais j'arrive pas à comprendre comment on fait un treeModel. Voilà, j'espère que tu as compris...
 
En tout caas merci de m'aider, ça fait pas mal de jour que je m'arrache les cheveux là dessus...

Reply

Marsh Posté le 05-02-2005 à 21:33:47    

si tu veux pas qu'ils soient dans le jtree il faut les enlever de ta hiérarchie


Message édité par EpoK le 05-02-2005 à 21:34:13
Reply

Marsh Posté le 06-02-2005 à 03:10:36    

Mouai, les enlever de la hierarchie reviendrait justement à les effacer totalement... C'est justement ce que je veux éviter. Dans mon cas, l'arbre a été fait de façon à ce que chaque noeud et feuille soit une implémentation d'un objet (appelé DataComposite, mais bon, ca aurait pu être toto), et je ne veux pas les effacer, je veux juste que ça apparaisse plus.
 
Enfin bref, si vous connaissez une bonne doc (autre qu'une API svp...) sur les treeModels, ce serait cool. (treeModels, et cellrenderers peut être aussi) Comme ça, peut être qu'en créant l'arbre à partir de mes composites, je pourait sélectionner ceux qui apparaissent ou pas...
 
Merci

Reply

Marsh Posté le 06-02-2005 à 13:03:46    

castrogne > je te propose de faire un TreeNode spécifique qui va te faire disparaître ton truc.
 
Je reviens.

Reply

Marsh Posté le 06-02-2005 à 14:39:29    

Code :
  1. /*
  2. * Created on 6 févr. 2005
  3. *
  4. * TODO To change the template for this generated file go to
  5. * Window - Preferences - Java - Code Style - Code Templates
  6. */
  7. package org.nraynaud.treewrapper;
  8. import java.awt.BorderLayout;
  9. import java.awt.event.ActionEvent;
  10. import java.util.Enumeration;
  11. import java.util.Vector;
  12. import javax.swing.AbstractAction;
  13. import javax.swing.JButton;
  14. import javax.swing.JFrame;
  15. import javax.swing.JPanel;
  16. import javax.swing.JSplitPane;
  17. import javax.swing.JTextArea;
  18. import javax.swing.JTree;
  19. import javax.swing.text.AbstractDocument;
  20. import javax.swing.text.Element;
  21. import javax.swing.tree.TreeModel;
  22. import javax.swing.tree.TreeNode;
  23. /**
  24. * @author nicolas
  25. *  
  26. * TODO To change the template for this generated type comment go to Window -
  27. * Preferences - Java - Code Style - Code Templates
  28. */
  29. public class TreeNodeWrapper implements TreeNode {
  30. private TreeNode realNode;
  31. private Vector wrappedChildren;
  32. private TreeNodeSelector selector;
  33. private TreeNodeWrapper parent;
  34. public TreeNodeWrapper(TreeNode realNode,
  35.   TreeNodeSelector selector) {
  36.  this(realNode, null, selector);
  37. }
  38. protected TreeNodeWrapper(TreeNode realNode, TreeNodeWrapper parent,
  39.   TreeNodeSelector selector) {
  40.  this.realNode = realNode;
  41.  this.selector = selector;
  42.  this.parent = parent;
  43. }
  44. public void reset() {
  45.  wrappedChildren = null;
  46. }
  47. public int getChildCount() {
  48.  return getWrappedChildren().size();
  49. }
  50. public boolean getAllowsChildren() {
  51.  return realNode.getAllowsChildren();
  52. }
  53. public boolean isLeaf() {
  54.  return realNode.isLeaf();
  55. }
  56. public Enumeration children() {
  57.  return getWrappedChildren().elements();
  58. }
  59. public TreeNode getParent() {
  60.  return parent;
  61. }
  62. public TreeNode getChildAt(int childIndex) {
  63.  return (TreeNode) getWrappedChildren().get(childIndex);
  64. }
  65. public int getIndex(TreeNode node) {
  66.  return getWrappedChildren().indexOf(node);
  67. }
  68. /**
  69.  * @return Returns the wrappedChildren.
  70.  */
  71. public Vector getWrappedChildren() {
  72.  if (wrappedChildren == null) {
  73.   wrappedChildren = new Vector();
  74.   for (Enumeration e = realNode.children(); e.hasMoreElements();) {
  75.    TreeNode realChild = (TreeNode) e.nextElement();
  76.    if (selector.select(realChild))
  77.     wrappedChildren.add(new TreeNodeWrapper(realChild, this,
  78.       selector));
  79.   }
  80.   wrappedChildren.trimToSize();
  81.  }
  82.  return wrappedChildren;
  83. }
  84. public String toString() {
  85.  return realNode.toString();
  86. }
  87. public interface TreeNodeSelector {
  88.  public boolean select(TreeNode node);
  89. }
  90. public static void main(String[] argv) {
  91.  JFrame frame = new JFrame("testage" );
  92.  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  93.  JTextArea area = new JTextArea();
  94.  TreeNode node = (AbstractDocument.AbstractElement) area.getDocument()
  95.    .getDefaultRootElement();
  96.  TreeNodeSelector selector = new TreeNodeSelector() {
  97.   public boolean select(TreeNode node) {
  98.    Element e = (AbstractDocument.AbstractElement) node;
  99.    return e.getEndOffset() - e.getStartOffset() != 1;
  100.   }
  101.  };
  102.  final JTree tree = new JTree(new TreeNodeWrapper(node, null, selector));
  103.  //final JTree tree = new JTree(node);
  104.  JPanel panel = new JPanel(new BorderLayout());
  105.  panel.add(tree, BorderLayout.CENTER);
  106.  panel.add(new JButton(new AbstractAction("refresh" ) {
  107.   public void actionPerformed(ActionEvent e) {
  108.    TreeModel model = tree.getModel();
  109.    ((TreeNodeWrapper)model.getRoot()).reset();
  110.    tree.setModel(null);
  111.    tree.setModel(model);
  112.   }
  113.  }), BorderLayout.SOUTH);
  114.  frame.getContentPane().add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, area));
  115.  frame.show();
  116. }
  117. }

Reply

Marsh Posté le 06-02-2005 à 17:27:49    

Merci!
 
J'ai pas encore eu le temps de tester, mais à première vue y'a de bonnes idées. Tu as trouvé ça où? (tout seull? cooool)
 
Bon, je vous tiens au courant!
 
++

Reply

Marsh Posté le 06-02-2005 à 17:27:49   

Reply

Marsh Posté le 06-02-2005 à 19:03:09    

castrogne a écrit :

J'ai pas encore eu le temps de tester, mais à première vue y'a de bonnes idées. Tu as trouvé ça où? (tout seull? cooool)


[:mlc]

Reply

Marsh Posté le 06-02-2005 à 19:19:35    

Lol, continue comme ça t'as du potentiel nraynaud :D

Reply

Marsh Posté le 06-02-2005 à 19:29:34    

machinbidule1974 > oué, là j'attaque les inner classes, mais c'est pas facile, j'vais faire un topic au lieu de lire la doc :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed