IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

JXTreeTable et cellrenderer


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut JXTreeTable et cellrenderer
    Bonjour,

    Je voudrais savoir si quelqu'un à réussi à appliquer un cellrenderer sur un jxtreetable sans que ca lui enlève la présentation en arbre???

    j'ai testé les 2~3 exemples que j'ai trouvé et tous transforment mon jxtreetable en table toute bête.

    Je voudrais savoir si c'est faisable???

    Un peu de code qui ne sert à rien pour ceux qui en réclament :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    tableCompte = new JXTreeTable(new CompteTreeTableModel(construitArbreCompte()));
     
    		DefaultTableCellRenderer renderer = new
    		DefaultTableCellRenderer() {
    		  public Component getTableCellRendererComponent(JTable
    		table, Object value, boolean isSelected, boolean hasFocus,
    		int row, int column) {
    		    Component component =
    		super.getTableCellRendererComponent(table, value,
    		isSelected, hasFocus, row, column);
    		    if (component instanceof JLabel) {
    		      ((JLabel) component).setText("!!!");
    		    }
    		    return component;
    		  }
    		};
    		tableCompte.getColumnModel().getColumn(CompteTreeTableModel.COMPTE_COL).setCellRenderer(renderer);

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Par défaut
    Ton affichage produit est normal tu ne gère aucun tree node dans ton cellRenderer. Regardes cette example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    public class DefaultTreeTableCellRenderer extends JTree implements
    		TableCellRenderer  {
     
    	protected int visibleRow;
    	protected JTreeTable treeTable;
     
    	public DefaultTreeTableCellRenderer(TreeModel model) {
    		super(model);
    	}
     
    	public void setTreeTable(JTreeTable treeTable){
    		this.treeTable = treeTable;
    		setCellRenderer(getIconNodeRenderer());
    	}
     
    	/**
             * Ueberschreiben, um den IconNodeRenderer anzupassen
             */
    	protected DefaultIconNodeRenderer getIconNodeRenderer(){
    		return new DefaultIconNodeRenderer();
    	}
     
    	public void updateUI() {
    		super.updateUI();
    		TreeCellRenderer tcr = getCellRenderer();
    		if (tcr instanceof DefaultTreeCellRenderer) {
    			DefaultTreeCellRenderer dtcr = ((DefaultTreeCellRenderer) tcr);
    			dtcr.setTextSelectionColor(UIManager
    					.getColor("Table.selectionForeground"));
    			dtcr.setBackgroundSelectionColor(UIManager
    					.getColor("Table.selectionBackground"));
    		}
    	}
     
    	public void setRowHeight(int rowHeight) {
    		if (rowHeight > 0) {
    			super.setRowHeight(rowHeight);
    			if (treeTable != null && treeTable.getRowHeight() != rowHeight) {
    				treeTable.setRowHeight(getRowHeight());
    			}
    		}
    	}
     
    	public void setBounds(int x, int y, int w, int h) {
    		super.setBounds(x, 0, w, treeTable.getHeight());
    	}
     
    	public void paint(Graphics g) {
    		g.translate(0, -visibleRow * getRowHeight());
    		super.paint(g);
    	}
     
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
    		Object node = ((TreeTableModelAdapter) table.getModel())
    				.nodeForRow(row);
    		if (isSelected) {
    			setBackground(table.getSelectionBackground());
    		} else {
    			setBackground(table.getBackground());
    		}
    		visibleRow = row;
    		return this;
    	}
     
    }

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    JTreeTable, TreeTableModelAdapter, DefaultIconNodeRenderer.... ils sortent d'où???

  4. #4
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    En faite ce que je voudrais faire c'est mettre en gras mes titres comme vous pouvez ne pas le voir sur cet exemple il y'a deux types d'objets des titres et des libelles de comptes et je voudrais que les titres soient en gras.



    Par exemple ASSURANCES est un titre alors que ASSURANCE DECES est un libelle de compte.


  5. #5
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    J'ai rien trouvé mais je continue à chercher ....

    j'ai un jxtreetable avec deux types d'objets des objets "titre_compte" et des objets "comptes" j'ai mis un addMouseListener sur mon Jxtreetable pour lorsqu'on clique droit sur un élément selon le type d'objet on n'a pas le meme menu contextuel... voici le code qui fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (tableCompte.getModel().getValueAt(ligne,0).getClass().getName()=="com.monsite.noyau.Titre_Compte"){
    						//crée le menu contextuel selon le type cliqué
    						menuContextuel.add(addCpt);
    						menuContextuel.addSeparator();
    						menuContextuel.add(addTit_Cpt);
    						menuContextuel.add(ediTit_Cpt);
    						menuContextuel.add(suppTit_Cpt);
    					}else{
    						menuContextuel.add(ediCpt);
    						menuContextuel.add(suppCpt);
    					}
    Je peux en recupérant le nom de la classe savoir si c'est tel ou tel objet.

    J'ai essayer de mettre un treecellrenderer mais l'inconvénient c'est que tout mes objets sont des TreeNode et donc je ne peux pas différencier le rendu de mes objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MonTreeCellRenderer extends DefaultTreeCellRenderer {
     
    		  public Component getTreeCellRendererComponent(JTree tree, Object value,
    		      boolean selected, boolean expanded, boolean leaf, int row,
    		      boolean hasFocus) {
     
    		    super.getTreeCellRendererComponent(tree,value, selected, expanded,
    		        leaf, row,hasFocus);
    		    System.out.println(value.getClass());//renvoie com....TreeNode pour tout mes éléments
     
    		    return this;
    		  }
    		}
    Je ne sais pas quoi faire

  6. #6
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    On bloque pendant des jours on essaye tout et le jour ou on post un message 20 minutes après on trouve la solution!!!

    Au cas ou ca intéresserai quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    	public class MonTreeCellRenderer extends DefaultTreeCellRenderer {
     
    		  public Component getTreeCellRendererComponent(JTree tree, Object value,
    		      boolean selected, boolean expanded, boolean leaf, int row,
    		      boolean hasFocus) {
     
    		    super.getTreeCellRendererComponent(tree,value, selected, expanded,
    		        leaf, row,hasFocus);
     
    		    DefaultMutableTreeNode treeNode=(DefaultMutableTreeNode)value;
    		    Object objet=treeNode.getUserObject();
    		    if (objet.getClass().getName().equals("com.monsite.noyau.Titre_Compte")){
    		    	this.setFont(new Font("",Font.BOLD,11));//met en gras et un peu plus gros les objets demandés
    		    }else{
    		    	this.setFont(new Font("",Font.PLAIN,10));//le reste en normal
    		    }
    		    return this;
    		  }
    	}

  7. #7
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par grabriel
    if (objet.getClass().getName().equals("com.monsite.noyau.Titre_Compte"))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(objet instanceof Titre_Compte)
    C'est plus simple et en plus tu profites des import
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CellRenderer utilisation processeur
    Par theyankee76 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/12/2006, 13h41
  2. Probleme avec les JTable et CellRenderer
    Par Sylmandel dans le forum Composants
    Réponses: 1
    Dernier message: 14/04/2006, 09h21
  3. [FLASH MX] datagrid cellRenderer
    Par totoche dans le forum Flash
    Réponses: 4
    Dernier message: 07/11/2005, 17h25
  4. Réponses: 10
    Dernier message: 18/05/2004, 16h42
  5. Réponses: 9
    Dernier message: 12/08/2002, 07h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo