2017-04-08 1 views
0

特定の目的のために、Swing/AWTコンポーネント階層にアクセスするだけでUIを操作しようとしています。JTree(Swing Component Hierachy)内でレンダリングされるコンポーネントを取得する方法

私はカスタムTreeCellRendererを使ってレンダリングされ、各ノードにJCheckBoxを持っているJTreeを持っています。

Sample JTree

私はプログラム的にそれは状態だ変更するには、特定のノードをレンダリングするために使用される特定のJCheckBoxのオブジェクトを取得しようとしています、私が持っていることはJTreeのコンポーネントオブジェクトです。

特定のノードを描画するために作成されたJCheckBoxコンポーネントを取得する方法が見つかりませんでした。

私は再帰的に)(Container.getComponentsを呼び出し続ける場合は、私は件まで達する:

class javax.swing.JTree 
class javax.swing.CellRendererPane 
class javax.swing.tree.DefaultTreeCellRenderer 

が、これらはdoen'tは、カスタムレンダラでレンダリングされた部品を配っているようです。

+2

特定のノードに対して作成されたチェックボックスはありません。それはレンダリングの仕組みではありません。すべてのノードをペイントするために、単一のチェックボックスインスタンスが使用されます。ノードの表示方法を変更するには、モデルを変更し、イベントを発生させ、モデルが変更されたことをツリーが認識できるようにし、レンダラーに変更されたノードを再レンダリングするように要求する必要があります。 –

+0

正しい方向を指摘してくれてありがとう。 – coderplusplus

答えて

0

@ JB-Nizetがコメントで指摘したように、リフレクションを使用してカスタムモデルオブジェクトを更新することで問題を解決しました。

Object modelObject = nodeToSelect.getUserObject(); 
Method method = modelObject.getClass().getMethod("setSelected", boolean.class); 
method.invoke(modelObject,true); 
関連する問題