2012-03-30 19 views
2

私はそれを変更しようとしているJTreeを持っています。選択されたノードの実際の選択領域はJTreeの左端からJTreeの右端まで広がります。JTree:L&Fに関係なく外観を変更してください

Web上のほとんどの例では、BasicTreeUIの拡張について話しています。そこから、選択範囲を決定するメソッドを変更するだけです。それだけです。ただし、これにより、JTreeは、実行するプラットフォームに関係なく、その実装を使用する必要があります。私はいつもBasicTreeUI(Metal、Windows、Aquiaの実装ではない)を使用しているため、特定のプラットフォームを対象とするさまざまなUI実装を実際に利用することはできません。

私が理想的にやってみたいのは、現在JTreeにインストールされているBasicTreeUIの実装をすべて取り出して、BasicTreeUIを拡張するカスタムラッパーのラッパーにラップすることです。そこから、すべてのメソッドをオーバーライドし、ラップされたUIに委譲し、ノード選択領域を再計算する必要がある場合はいくつかのメソッドを実装します。しかし、BasicTreeUIのほとんどのメソッドは保護されていますので、私は実際にこれを行うことができます 。

これを回避する方法がわかりません...任意のアイデアを歓迎します!

+0

"しかし、BasicTreeUIのほとんどのメソッドは保護されています" - 保護されている場合は、それらを上書きすることができます。 –

答えて

2

おそらく、あなたはsetUIをオーバーライドして、そのように、カスタムツリーUIで提供UIをラップすることができます:

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

別のオプションを提供/グローバルUIManagerに木のUIプロパティの設定に探している検討します。私は、プラットフォーム固有のツリーUIが、グローバル値UIManagerにプロパティ値を要求し、それに応じて構成すると考えています。おそらく、単にUIManager.put("Tree.selectionWidth", 100)のようなものを実行できます。

+0

あなたの提案をありがとう。ただし、MyCustomTreeUIは、提供されているUIインスタンスの必要なメソッドを保護されているようにオーバーライドできないため、実際には機能しません。具体的には、ノードのサイズを決定するBasicTreeUI#createNodeDimensions()メソッドの寸法を変更したいと考えています。 – sbrattla

+0

あなたは 'protected'メソッドをオーバーライドできます。 –

+0

クラスが存在するパッケージに何も追加できない場合、保護されたメソッドをどのようにオーバーライドしますか? – sbrattla