Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Des composants JPanel dans un JTree ?

3 réponses
Avatar
john
Bonsoir tlm,

Je suis à la recherche d'un échantillon de code
permettant la personnalisation d'un composant JTree
à savoir l'incorporation de JPanel au lieu de l'icône
et du label dans le comportement par défaut.

Je pense qu'il faut implémenter soi-même un modèle
j'aimerais donc quelques informations utiles à ce sujet:
- exemples de code
- urls ?
J'imagine qu'il doit bien y avoir qqn qui s'est
déjà fait la main là-dessus..


Est-ce vraiment possible d'incorporer des JPanel
dans chaque noeud d'un arbre JTree ?
Cela permettrait d'ajouter presque n'importe quoi
dans chaque JPanel sous chaque noeud.

Merci d'avance pour votre aide et je vous souhaite
tous mes voeux pour la nouvelle année.

John.

3 réponses

Avatar
Isammoc
Pour répondre à ta question, ce n'est pas le modèle qu'il faut réécrire
(quoiqu'après, c'est à toi de voir)
mais pour avoir des JPanel dans ton JTree, c'est un TreeCellRenderer que tu
dois implémenter (regarde le DefaultTreeCellRenderer)
et le TreeCellEditor (si tu veux que l'utilisateur puisse éditer pendant
l'execution)

amuse toi bien ;-P

Isammoc

--
--
"john" a écrit dans le message de news:

Bonsoir tlm,

Je suis à la recherche d'un échantillon de code
permettant la personnalisation d'un composant JTree
à savoir l'incorporation de JPanel au lieu de l'icône
et du label dans le comportement par défaut.

Je pense qu'il faut implémenter soi-même un modèle
j'aimerais donc quelques informations utiles à ce sujet:
- exemples de code
- urls ?
J'imagine qu'il doit bien y avoir qqn qui s'est
déjà fait la main là-dessus..


Est-ce vraiment possible d'incorporer des JPanel
dans chaque noeud d'un arbre JTree ?
Cela permettrait d'ajouter presque n'importe quoi
dans chaque JPanel sous chaque noeud.

Merci d'avance pour votre aide et je vous souhaite
tous mes voeux pour la nouvelle année.

John.


Avatar
john
Merci pour ta réponse Isammoc, j'ai pu la lire sur google et non depuis
mon serveur news.. étrange, y'a un sacré délais.

J'ai donc facilement réussi a incorporer un JPanel dans chaque noeud de
l'arbre JTree. J'ai implémenté un TreeCellRenderer et créé une
spécialisation(héritage) de DefaultMutableTreeNode. C'est donc
parfaitement fonctionnel, merci :)

Mais il reste une chose: j'aimerais pouvoir gérer les événements
pouvant avoir lieu dans les panneaux de chaque noeud de l'arbre.
Exemple: si un panneau contient qqpart un bouton, ce serait bien de
pouvoir y répondre.

Je sais comment détecter les cliques souris sur chaque noeud, déterminer
le chemin arborescent et récupérer le noeud sélectionné, mais comment
gérer les événements ayant lieu à l'intérieur d'un noeud ? donc sur
un des panneaux.

Merci d'avance et bon weekend!
John.
Avatar
Symon
Salut,

Comme tu l'as fait avec ton TreeCellRenderer pour afficher les données
contenus dans ton arbre. Il faut que tu crée une classe qui implémentera
TreeCellEditor pour pouvoir éditer ces données.

Il te suffit ensuite de brancher ton éditeur sur ton arbre grâce à sa
méthode setCellEditor(TreeCellEditor tce) ...

Voici à quoi peut ressembler l'éditeur :

class MyBeautifullTreeEditor implements TreeCellEditor{

public void addCellEditorListener(CellEditorListener l){ }
public void cancelCellEditing() { }

public Object getCellEditorValue(){
return this;
}

public boolean isCellEditable(EventObject evt){
if(evt instanceof MouseEvent){
MouseEvent mevt = (MouseEvent) evt;
if (mevt.getClickCount() == 1){
return true;
}
}
return false;
}

public void removeCellEditorListener(CellEditorListener l){}

public boolean shouldSelectCell(EventObject anEvent){
return true;
}

public boolean stopCellEditing(){
return false;
}

public Component getTreeCellEditorComponent(JTree tree, Object obj,
boolean isSelected, boolean expanded, boolean leaf, int row){
DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)obj;
JCheckBox c = (JCheckBox)dmtn.getUserObject();
c.setEnabled(true);
return editor;
}

}

A+

Symon

john wrote:
Merci pour ta réponse Isammoc, j'ai pu la lire sur google et non depuis
mon serveur news.. étrange, y'a un sacré délais.

J'ai donc facilement réussi a incorporer un JPanel dans chaque noeud de
l'arbre JTree. J'ai implémenté un TreeCellRenderer et créé une
spécialisation(héritage) de DefaultMutableTreeNode. C'est donc
parfaitement fonctionnel, merci :)

Mais il reste une chose: j'aimerais pouvoir gérer les événements
pouvant avoir lieu dans les panneaux de chaque noeud de l'arbre.
Exemple: si un panneau contient qqpart un bouton, ce serait bien de
pouvoir y répondre.

Je sais comment détecter les cliques souris sur chaque noeud, déterminer
le chemin arborescent et récupérer le noeud sélectionné, mais comment
gérer les événements ayant lieu à l'intérieur d'un noeud ? donc sur
un des panneaux.

Merci d'avance et bon weekend!
John.