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
|