2 votes

JTree : modifier l'apparence indépendamment de L&F

J'ai un JTree que j'essaie de modifier de façon à ce que la zone de sélection réelle pour tout nœud sélectionné s'étende de l'extrême gauche du JTree à l'extrême droite du JTree.

La plupart des exemples sur le web parlent d'étendre BasicTreeUI. À partir de là, il suffit de modifier les méthodes qui déterminent la zone de sélection, et c'est tout. Cependant, il faudra que le JTree - quelle que soit la plate-forme sur laquelle il fonctionne - utilise cette implémentation. Je ne pourrai pas vraiment tirer parti des diverses implémentations de l'interface utilisateur qui ciblent des plates-formes spécifiques, car j'utiliserai toujours BasicTreeUI (et non les implémentations Metal, Windows ou Aquia).

Idéalement, j'aimerais pouvoir prendre l'implémentation de BasicTreeUI actuellement installée sur le JTree et l'envelopper dans un wrapper personnalisé qui étend BasicTreeUI. À partir de là, je surchargerais toutes les méthodes et les déléguerais à l'interface utilisateur enveloppée, et j'effectuerais ma propre mise en œuvre de quelques méthodes lorsque cela est nécessaire pour recalculer la zone de sélection des nœuds. Cependant, la plupart des méthodes de BasicTreeUI sont protégées, donc je peux vraiment faire ça.

Je ne sais pas comment contourner ce problème... toute idée serait la bienvenue !

2voto

Nate W. Points 5211

Vous pourriez peut-être remplacer setUI et enveloppez l'interface utilisateur fournie dans votre interface utilisateur d'arbre personnalisée, comme suit :

@Override
public void setUI(TreeUI ui) {
    super.setUI(new MyCustomTreeUI(ui));
}

Une autre option à envisager est de fournir ou de définir les propriétés de l'interface utilisateur de l'arbre dans le fichier global de l'interface utilisateur. UIManager . Je pense que les interfaces d'arbre spécifiques à la plate-forme demanderont à l'interface globale de l'arbre d'être mise à jour. UIManager pour les valeurs des propriétés et se configurent en conséquence - peut-être pourriez-vous simplement faire quelque chose comme UIManager.put("Tree.selectionWidth", 100) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X