Tout cela va de la mémoire. Je vais modifier si je trouve quelque chose de mal avec ça demain.
consultez BasicTreeUI ou MetalTreeUI. Je crois qu'ils peignent tous les deux des lignes. Ce que vous devez faire est de créer une nouvelle classe qui étend (j'imagine sur le nom ici) SubstanceTreeUI et écraser paintHorizontalPartOfLeg() et paintVerticalPartOfLeg(). Ensuite, vous avez le choix:
- Vous pouvez appeler myTree.setUI (nouveau MyTreeUI())
- UIManager.getDefaults() mettre ("TreeUI", MyTreeUI.class.getName()) à un moment donné. avant de faire votre DTree
Si vous ne voulez pas sous-classe, essayez UIManager.getDefaults(). mettre (« TreeUI », BasicTreeUI.class.getName()) et voir si cela semble correct.
EDIT 2: Après un examen plus loin, il serait plus facile de simplement appeler .setUI (nouveaux BasicTreeUI()) sur votre DTree ou appelez UIManager.getDefaults() mettre ("TreeUI", BasicTreeUI.class.getName().) avant de créer votre arbre.
EDIT:
SubstanceTreeUI est un cubclass de BasicTreeUI. Il a remplacé paintXXXPartOfLeg().
Horiz:
@Override
protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds, TreePath path, int row,
boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
boolean toPaint = (!this.tree.isEnabled())
|| this.isInside
|| !FadeConfigurationManager.getInstance().fadeAllowed(
SubstanceLookAndFeel.TREE_DECORATIONS_ANIMATION_KIND,
tree);
if (FadeTracker.getInstance().isTracked(this.tree, SubstanceLookAndFeel.TREE_DECORATIONS_ANIMATION_KIND)) {
Graphics2D graphics = (Graphics2D) g.create();
graphics.setComposite(TransitionLayout
.getAlphaComposite(this.tree,
FadeTracker.getInstance()
.getFade10(this.tree,SubstanceLookAndFeel.TREE_DECORATIONS_ANIMATION_KIND)/10.0f,
g));
super.paintHorizontalPartOfLeg(graphics, clipBounds, insets,
bounds, path, row, isExpanded, hasBeenExpanded, isLeaf);
graphics.dispose();
} else if (toPaint) {
super.paintHorizontalPartOfLeg(g, clipBounds, insets, bounds, path,
row, isExpanded, hasBeenExpanded, isLeaf);
}
}
Il semble que les lignes ne sont peintes si l'une des conditions suivantes est remplie:
- L'arbre n'est pas activé, la souris est dans les limites des arbres [cette .inside] et fading (?) ne sont pas autorisés sur l'arbre [! FadeConfigurationManager.getInstance(). fadeAllowed (...)]
- Le FadeTracker suit le JTree [FadeTracker.getInstance(). isTracked (...)]
Figure comment assurer que le JTree est suivi par le FadeTracker ou essayez ce hack très rude (voir ci-dessous):
Vous pouvez également couper et coller le code de méthodes paintXXXPartOfLeg de BasicTreeUI dans une sous-classe.
public MyTree extends JTree {
private boolean overrideIsEnable = false;
public void setOverrideIsEnable(boolean b) { overrideIsEnabeld=true; }
public boolean isOverrideIsEnable(boolean b) { return overrideIsEnabeld; }
public boolean isEnabled() {
if(overrideIsEnabled) return false;
return super.isEnabled();
}
}
class MyTreeUI extends SubstanceTreeUI {
protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds, TreePath path, int row,
boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
if(this.tree instanceof MyTree)
try {
Field f = SubstanceTreeUI.class.getDeclaredField("inside");
f.setAccessible(true);
Boolean v = (Boolean)f.get(this);
f.set(this,Boolean.true);
((MyTree)this.tree).setOverrideIsEnable(true);
} catch(Throwable t) {
//want to default back to substanceUI if this fails.
}
super.paintHoriz.....();
try{
f.set(this,v);
((MyTree)this.tree).setOverrideIsEnable(true);
}catch(Throwable t) {
//see above
}
}
//repeat for Vertical
}
Nous vous remercions de votre réponse.Ce qui m'intéresse vraiment, c'est comment exactement je dessine les lignes une fois que je sous-classe et implémente les méthodes. (Attention, la classe substanceUI n'a pas ces méthodes, ce n'est pas un descendant de BasicUI). Pourriez-vous peut-être me donner un petit exemple ou me diriger vers une direction où je peux trouver des informations? –
S'il vous plaît jeter un oeil à ma réponse éditée. FYI Vous ne voulez pas regarder SubstanceUI, vous voulez regarder SubstanceTreeUI, qui (selon google) a les deux méthodes. – KitsuneYMG
merci beaucoup. Votre réponse est juste sur place. très utile. –