問題タブ [jtree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
7357 参照

java - Swing question / JTree / カスタムツリーモデル

私は問題を抱えており、誰かが何がうまくいかないのか、その理由を知っていて、提案どおりに機能させるために今見逃していることを説明してくれることを願っています。

カスタム TreeModel (「WRTreeModel」、以下を参照) に基づいて構築された JTree があります。このモデルが使用されるデータ構造は、いくつかのフィールドと、さらに以下に示す「ArrayListModel」に基づくリストを含むルート オブジェクトのビルドです。WRTreeModel を使用してツリーを構築すると、ツリーがきれいに見えます。オブジェクトに含まれるリストとフィールドを表すノードを展開および折りたたむことができます。これらのリストを展開したり折りたたんだり、その内容を確認したりできます。

ここで、リストの 1 つの子を削除したいと思います。既にわかっているように、ArrayListModel の remove メソッドを呼び出してモデルから子を削除します。WRTreeModel にその削除を認識させるには、まずその fireIntervalRemoved メソッドを呼び出す必要があります。これまでのところは問題ありません。

WRTreeModels の内部クラス ArrayModelListener では、intervalRemoved メソッドが fireTreeNodesRemoved の呼び出しを準備し、登録されているすべての TreeModelListeners (したがって、モデルに接続されたときに自動的に登録される JTree) に転送される TreeEvent を構築します。

ここで、ツリーが変更を反映し、内部および視覚的表現を更新して新しい状態を表示することを期待します。残念ながら、これはそのようには機能しないようです。何かが起こる。しかし、ノードをクリックすると、いくつかの EventHandler-Exceptions がスローされるように変更されました。明らかに、何かが本当に混乱しました。

その場でそのような質問に答えるのは簡単ではないことは承知していますが、迅速な回答をいただければ幸いです。カスタム ツリー モデル (DefaultMutableTreeNode または特定の実装ベースのクラスではなく) の使用と、JTree のイベント処理と更新がどのように機能するかを説明している Web サイトを誰かが知っていれば、それも役に立ちます。

敬具、

トーマス・アーツ



0 投票する
2 に答える
1299 参照

java - JTreeの選択に基づいてJPopupMenuでJMenuItemを表示/非表示にする

JTreeのノードを右クリックするとJPopupMenuを表示するJTreeがあります。JTreeで選択したノードに基づいて、JPopupMenuの特定のJMenuItemを非表示/表示または有効化/無効化するための最良の方法は何ですか?

頭に浮かんだ最初の解決策は、「値が変更された」イベントのJTreeにTreeSelectionListenerを追加することでした。イベント処理コードでは、TreeSelectionEventのgetNewLeadSelectionPath()メソッドを使用して最新の選択のパスを取得し、結果のTreePathオブジェクトのgetLastPathComponent()を使用して選択したノードを取得します。ここから、JPopupMenuオブジェクトにアクセスし、特定のJMenuItemを非表示/表示するために必要な変更を実行する一連のIFステートメントを作成します。

しかし、これには何か気がかりなことがあるので、もっと良いアプローチがあるかどうかSOに尋ねることにしました。

0 投票する
6 に答える
6186 参照

java - JTree のすべてのノードの展開/折りたたみを高速化する

約 100000 以上のノードを持つ JTree があります。次に、ツリー全体を展開します。そのために、ここで見つけたソリューションを使用します。

私の問題は、このような大きなツリーの展開に 60 秒以上かかることです。これはあまり便利ではありません。拡張をスピードアップする方法について誰か提案がありますか?

0 投票する
8 に答える
60910 参照

java - 基になるモデルにいくつかのノードを追加した後、JTreeを更新するにはどうすればよいですか?

まず、DefaultTreeModelを使用しないとしましょう。私は自分のTreeModelを実装しているので、DefaultXXXのものを使用できません。問題は次のとおりです。モデルが定義するいくつかのaddStuff()メソッドを使用して、基になるデータ構造にノードを追加します。次に、addStuff()関数内でtreeNodesChanged()を呼び出してリスナーに通知します(treeNodesInsertedメソッドがあることはわかっていますが、同じことです。リスナーに別のメソッドで通知するだけです)。これで、リスナーの1つがメインフォームの静的クラスになり、このリスナーは、メインフォームにも含まれているJTreeにそれ自体を更新するように指示できます。モデルからノードの一部またはすべてを「リロード」するようにJTreeに指示するにはどうすればよいですか?

更新:この質問を見つけました。まったく同じではありませんが、私が望む答えが得られます。

更新2:私の問題は、ビューア(JTree)に通知する方法ではなく、モデルからの通知後にjtreeをどのように再ロードする必要があるかということでした。

まず最初に、基になる変更を反映するためにツリーを更新することを知っている唯一の方法は、updateUI()を呼び出すか、setModel()メソッドを再利用することです。基本的に、私の問題はこれです:

モデルに変更が発生したことがTreeModelListenerに(TreeModelListener APIを介して)通知されたと仮定します。さて、今何?

JTreeがTreeModelListenerを実装していないため、この問題が発生します。したがって、私の状況では、リスナーはJTreeのコンテナー、またはリスナーを実装する内部クラスであり、Jtreeと同じコンテナーの下にあります。

それで、私がTreeModelListenerの実装であり、兄のJTreeと一緒にJFormで幸せに暮らしているとしましょう。突然、私のメソッドtreeNodesInserted(TreeModelEvent evt)が呼び出されました。私は今何をしますか?内部からJtree.updateUI()を呼び出すと、モデルのリスナーリストがConcurrentModification例外をスローします。updateUI以外のものを呼び出すことはできますか?

いろいろ試してみましたが、JTreeを更新したのはupdateUIだけでした。だから私はリスナーの外でそれをしました。JFormから、undrlying構造を変更するモデルのメソッドを呼び出すだけで、次にupdateUIを呼び出します。TreeModelListenerは使用されません。

UPDATE3:暗黙のTreeModelListenersが登録されていることがわかりました。私のモデルのaddTreeModelListener(TreeModelListener listener)実装では、デバッグsystem.out行を配置します。

jTree.setModel(model)を実行したときに、このデバッグ出力が表示されました。

追加されたリスナー:javax.swing.JTree.TreeModelHandler

追加されたリスナー:javax.swing.plaf.basic.BasicTreeUI.Handler

ConcurrentModificationExceptionは、jtree.updateUI()の呼び出しがリスナー(両方ではなく、plafのみ)を再登録するために発生するため、リスナー通知ループ内でupdateUIを呼び出すとスローされます。ツリーを更新する唯一の方法は、TreeModelListenerの外部で行うことです。より良い解決策についてのコメントやアイデアはありますか?私は何かが足りないのですか?

0 投票する
4 に答える
6291 参照

java - 動的JTreeの作成(ルートノードの可視性の制御)

JTreeを動的に生成する方法について質問があります。子も非表示にせずにルートノードを非表示に設定する方法はありますか?次のことを試みましたが、すべてのノードが非表示として表示されます。ルートノードの子をいつでも追加および削除したいことを覚えておいてください。コメントを追加したので、私がやろうとしていることをフォローしてください。私はJTreeに不慣れで、規則がわからないので、彼らが私が必要としないことをしているのかどうか教えてください。また、リスナーに複数の子を選択できるようにしたいと思います。

上記の例では。何も表示されず、「tree.setRootVisible(false)」を削除すると、ノードを含むすべてが表示されます。

0 投票する
1 に答える
8748 参照

java - Java: JTree で XML ファイルを表示する方法

XML ファイルの内容を .xml 形式で表示する方法が欲しいですJTree。カスタムTreeModel(およびTreeCellRenderer)を実装することにより、DOMを使用してこれをすでに達成しています。ただし、非常に扱いにくく (多くの回避策とハッカーが必要)、端がかなり荒いです。

JTreeSAXで解析されたXMLファイルの内容を表示する方法を知っている人はいますか?

ありがとう!

0 投票する
2 に答える
7464 参照

java - JCheckBoxノードを使用したJTreeレンダリング

標準のSwingJTreeを変更して、チェックボックスのあるノードとないノードを混在させようとしています。これは例です:

代替テキスト

チェックボックスの1つ(この例では「User01」ノード)をオン/オフにしようとすると、ツリーはノードを失います。

代替テキスト

私のコードはこの例を応用したものです:http://forums.sun.com/thread.jspa ?threadID = 5321084&start=13 。

次のように、DefaultMutableTreeNodeにJCheckBoxを埋め込む代わりに:

DefaultMutableTreeNodeから派生したモデルノードを作成する方が理にかなっていると思いました。これをJTreeNodeと呼びます。このクラスは、DefaultMutableTreeNodeのUserObjectをJCheckBoxに自動的に設定します。クラスのShowCheckBoxプロパティは、TreeCellRendererによって使用され、JCheckBoxまたはDefaultTreeCellRendererのどちらが使用されているかを判別します。JTreeNodeは次のように使用されます。

問題は、TreeCellEditorを実装するクラス、特にgetCellEditorValue()またはgetTreeCellEditorComponent()メソッドにあると思います。この問題は、getCellEditorValue()が、より単純なモデルインスタンスではなく、DefaultMutableTreeNodeの派生物を返すことに関係していると思われます。

TreeCellRenderのgetTreeCellRendererComponent()メソッドは次のとおりです。

どんな考えでも大歓迎です。

0 投票する
1 に答える
1284 参照

java - セル内に左揃えと右揃えのテキストがある JTree?

私がやろうとしているのは、各セルに通常のテキストが含まれているだけでなく、各セルの右揃えのテキストも含まれている JTree を作成することです (階層レベルに関係なく、ツリーの端に右揃え)。

独自の TreeCellRenderer を作成しようとしましたが、セルのサイズが更新されません。カスタム ツリー UI でこのアイデアも試しましたが、同様の問題が発生しています。

また、ツリーの右側に「接着」された JPanel を使用してカスタム コンポーネントを作成しようとしました。これは最も成功しましたが、ツリー セルを右に拡張してこの追加のパネルに触れることができませんでした。

代替テキスト http://img718.imageshack.us/img718/3676/problem.png

0 投票する
1 に答える
336 参照

java - 選択なしの Jtree ノード展開

JTree のノードを選択せず​​に展開/折りたたむことはできますか? (強調表示されていません)

どうもありがとう

0 投票する
1 に答える
1332 参照

java - javaJTreeが更新されない

JTreeで問題が発生しています。同じクラス内にDefaultTreeModelを作成すると、JFrameが正常に更新されました。ただし、別のクラスからupdateメソッドを呼び出したいのですが、呼び出すとJTreeは空白のままになります。JTreeはクラスGUIにあり、storeと呼ばれる別のクラスにそのように格納されます。

..。

ただし、これは何もしません。しかし、私はクラスGUI内で次のように呼び出します。

すべてが正常に動作します。なぜ問題があるのか​​について誰かが何か考えを持っていますか?

ツリーの構築方法は次のとおりです。

よろしくお願いします。