sbrattla
sbrattla

Reputation: 5386

JTree : modify apperance regardless of L&F

I've got a JTree which I'm trying to modify it so that the actual selection area for any selected node will extend from the very left of the JTree to the very right of the JTree.

Most examples on the web talks about extending BasicTreeUI. From there you just modify the methods that determine selection area, and that's it. However, this will require that the JTree - regardless of which platform it runs on - will use that implementation. I won't really be able to take advantage of the various UI implementations that target specific platforms as I always will be using BasicTreeUI (and not the Metal, Windows or Aquia implementations).

What I ideally would like to be able to do is to take whatever implementation of BasicTreeUI that is currently installed on the JTree and wrap it in a custom wrapper of mine which extends BasicTreeUI. From there I would override all methods and delegate to the wrapped UI, and do my own implementation of a few methods where required to recalculate the node selection area. However, most methods on BasicTreeUI is protected, so I can really do this.

Not sure how to get around this...any ideas would be welcome!

Upvotes: 2

Views: 173

Answers (1)

Nate W.
Nate W.

Reputation: 9259

Perhaps you could override setUI and wrap the provided UI in your custom tree UI, like so:

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

Another option to consider is looking into providing/setting tree UI properties in the global UIManager. I believe that the platform-specific tree UIs will ask the global UIManager for property values and configure themselves accordingly - perhaps you could simply do something like UIManager.put("Tree.selectionWidth", 100).

Upvotes: 2

Related Questions