Page d'accueilFindIt !Contact Cahier Swing

Cahier Swing

 Forum Cahier Swing

Ce forum est dédié au Cahier du Programmeur Swing et Sweet Home 3D son étude de cas.
Utilisez-le pour toute demande d'information supplémentaire ou pour toute suggestion au sujet de cet ouvrage et de cette application.
Pour les informations relatives à l'ouvrage Bien programmer en Java 7 et au Cahier du programmeur Java, merci d'utiliser le forum qui leur est dédié.
Vous pouvez consulter ces forums librement. Pour y participer, inscrivez-vous tout d'abord.

Sujets Messages récents Identification Inscription
Messages du sujet Classe CatalogTree

Cyberg

Ville : Montréal
Membre depuis : 23 juil. 2008
Messages : 1
 3 août 2008 à 23:39
Bonjour,
Merci pour ces suberbes publications.

La classe CatalogTree à la page 110-111
La sous-classe CatalogCellRenderer me retourne pas le label modifié avec les icones. En debug, je vois qu'il ne considere pas comme un instanceof categorie.

Si j'enleve la condition if, j'ai une erreur de casting
Voici mon code:

package com.cyberg.sweethome3d.vue;

import java.awt.Component;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;

import com.cyberg.sweethome3d.model.Catalog;
import com.cyberg.sweethome3d.model.CategorieMeuble;
import com.cyberg.sweethome3d.model.Content;
import com.cyberg.sweethome3d.model.Meuble;

public class CatalogTree extends JTree {

/**
*
*/
private static final long serialVersionUID = 1L;
private static final int DEFAULT_HEIGHT=32;

public CatalogTree(Catalog catalog){

DefaultMutableTreeNode racine = new DefaultMutableTreeNode();
for(CategorieMeuble categorie :catalog.getCategorie()){
DefaultMutableTreeNode noeudCateg = new DefaultMutableTreeNode(categorie.getName());
racine.add(noeudCateg);
for(Meuble meuble : categorie.getlisteMeuble()){
DefaultMutableTreeNode noeudMeuble = new DefaultMutableTreeNode(meuble.getNom());
noeudCateg.add(noeudMeuble);
}//End for2
}//End for1

//Modification du modele avec la nouvelle hierarchie de noeud

setModel(new DefaultTreeModel(racine));
setRootVisible(false);
setShowsRootHandles(true);

setCellRenderer(new CatalogCellRenderer());

}

//Classe interne

private class CatalogCellRenderer extends DefaultTreeCellRenderer{

private static final long serialVersionUID = 1L;
private static final int DEFAULT_ICON_HEIGHT=32;
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,boolean hasFocus) {

JLabel label = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

DefaultMutableTreeNode noeud = (DefaultMutableTreeNode)value;

if(noeud.getUserObject() instanceof CategorieMeuble)
{
CategorieMeuble categorie = (CategorieMeuble)noeud.getUserObject();
label.setText(categorie.getName());
}
else if(noeud.getUserObject() instanceof Meuble)
{
Meuble meuble = (Meuble)noeud.getUserObject();
label.setText(meuble.getNom());
label.setIcon(getIcone(meuble.getIcone()));
}
//else label.setText("Salut");
return label;
}

}



private Icon getIcone(Content icone) {
try {
InputStream stream = icone.lectureStream();
BufferedImage image = ImageIO.read(stream);
stream.close();

if(image!=null){
int hauteur = isFixedRowHeight() ? getRowHeight() : DEFAULT_HEIGHT;
int largeur = image.getWidth() * hauteur / image.getHeight();
Image redim = image.getScaledInstance(largeur, hauteur, Image.SCALE_SMOOTH);
return new ImageIcon(redim);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return new ImageIcon();
}
}

Merci d'avence
Cyberg

Manu

Ville : Paris / France
Membre depuis : 29 avr. 2003
Messages : 394
 6 août 2008 à 10:35
Bonjour,

Dans le constructeur de CatalogTree, vous avez programmé :
  DefaultMutableTreeNode noeudCateg = new DefaultMutableTreeNode(categorie.getName());
et
  DefaultMutableTreeNode noeudMeuble = new DefaultMutableTreeNode(meuble.getNom());

Donc le userObject que vous utilisez dans votre arbre est une chaîne de caractères et non un objet CategorieMeuble ou Meuble. Modifiez votre programme en supprimant les appels à getName() et getNom().

---
Manu (moderator/modérateur)


Page d'accueilFindIt !ContactDébut de la page

© Copyrights 1997-2014 eTeks - Tous droits réservés

Cahier Swing