問題タブ [treemodel]
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.
java - Swing の「仮想ツリー」(カスタム TreeModel) に関する質問
OK、基本的な機能以上のものを使用する Swing のカスタム TreeModel の適切な例を実際に見つけることができなかったので、より複雑なアプリケーションではなく、それについて質問できるように独自に作成しました (コードは以下に続きます)。書き方を理解したら、本当に書きたいものです。ここに複数の関連する質問があることをお詫びします。参照する例がない状態でこれらの Q を単独で尋ねるのは難しいです。質問。私の実際のアプリケーションは無限ではなく、ただ大きい (状態がデータベースに格納されている) だけなので、カスタム TreeModel が適切と思われます。
これが何を示しているかについては、最初のコメント (上に表示されているはずです) を参照してください。これは無限ツリーを表示するカスタム TreeModel であり、ツリー内のすべてのノードが実際にメモリ内に存在する必要がある「通常の」ツリーでは不可能ですが、カスタム TreeModel を使用すると可能です。ユーザーがクリックするものは、本質的に有限です。:-)
いくつかの雑多な質問があります。この投稿に対する受け入れられた回答は、私の質問 #4 に対する最良の回答として提供されます。
1) TreeModel リスナー -- これは、TreeModel からの更新のイベントを受け取りたいクラス用であると仮定して正しいですか? (私が書いたものであれ、他の誰かが書いたものであれ) 典型的なユースケースは何ですか?
2) TreeModel.valueForPathChanged()
-- これはいつ呼び出されますか? 通常はどうすればよいでしょうか?
3) (これは TreeCellEditor / TreeCellRenderer に関係しています) -- 私が採用した例の行には、次の呼び出しがありました。
これは何のためですか?
4) クラス編成に関しては、この種のものを構造化するためのより良い方法はありますか? TreeModel (M = MVC のモデル) と TreeCellEditor / TreeCellRenderer (V = ビュー、または C = コントローラー、よくわかりません) を分離する必要があると思いますが、お互いについて漠然と知る必要があります。どちらがどの参照を含むべきかわかりませんでした。現在、私は TreeModel を独立したオブジェクトとして持っており、エディター/レンダラーは TreeModel への参照を持っているため、必要に応じてモデルを照会/変更できます。また、カスタムの TreeCellEditor と TreeCellRenderer が、両方のインターフェースを実装する 1 つのクラスである必要があるのではないかと考えています。私のitemStateChanged()
方法CheckBoxNodeEditor
ちょっと奇妙に思えます...チェックボックスがクリックされたときにアイテムリスナーイベントを取得します。次に、このイベントがレンダラーからのものであると想定し、適切な値を切り替えます。チェックボックスは現在チェックされているかチェックされていないため、このチェックボックスオブジェクトの選択は、チェックボックスの状態ではなく、マウスがクリックされたか離されたかのようです。
これを再構築する方法はおそらく複数あるため、より優れたモジュール化されたアプローチのように思えますが、現時点ではこれを行う方法がわからないため、提案をいただければ幸いです。
5) ツリー階層として表示される有向非巡回グラフ (DAG) -- アプリケーションを実行し、ノード 1、2、4、8、16、32、64、128 を展開すると、2 番目の「1」が表示されます。この例のアプリケーションのノード値は単なるLong
オブジェクトであるため、実際には最初の「1」と同じノードです。この 2 番目の "1" を 1,2,4,8,16,32,64,128 に拡張すると、2 つの "21" ノードが表示されます。「21」ノードは、必要に応じてチェック/チェックを外すことができます。しかし、理想的な世界では、「21」のいずれかをクリックすると、両方の「21」のチェック状態が更新されます。これを自動的に行う方法はありますか?または、現在同時に表示されている 1 つのノードの複数のパスをすべて追跡する必要がありますか? (または、存在する単一ノードのすべてのパス -- 有限 DAG では可能ですが、無限 DAG では不可能です) これは、同じノードに到達する複数のパスがある DAG のみの問題です...私のアプリケーションでこれを処理します。
file - GTK TreeStoresをファイルとの間で読み書きするにはどうすればよいですか?
私はこれに不慣れです。
TreeStoreをファイルに保存するにはどうすればよいですか?TreeModelインターフェイスを介してアンダーレイTreeStoreから特定の値を格納できますが、アンダーレイTreeStore全体を値として「取得」する方法はありますか、またはTreeStoreをトラバースして、一度に1行ずつ格納する必要がありますか?
/ J
sorting - GtkTreeViewでGtkTreeStoreのフラット表現を表示するにはどうすればよいですか?
GtkTreeView
/GtkTreeModel
セットアップで表示および操作するオブジェクトを含むTreeStoreがあります。
TreeStoreのTreeModelSortを表示するTreeViewもあります。これは、名前や日付などの列の並べ替えに使用します。
問題は、基になる子ノードの日付がたとえばroo tnodeの日付よりも遅い/早い場合でも、ソートメカニズムがルートノードのみをソートすることです。
したがって、問題は、オブジェクトをList
ツリーではなく、として表示する方法があるかどうかですが、他のTreeViewのパスへの参照を保持しますか?
java - Lists に裏打ちされた TreeModel
ソースデータを含むいくつかのListからTreeModelを構築したいと考えています。現在、配列、ベクター、およびハッシュテーブルからツリーを構築するために使用できるDynamicUtilTreeNodeと呼ばれるユーティリティ クラスがありますが、リストからではありませんか?! もちろん、List の toArray() メソッドを使用することもできますが、その時点での List の状態のクローン配列が提供されるため、List の変更は TreeModel に反映されません。
DynamicUtilTreeNode がリストをサポートしていない明確な理由はありますか? リストをサポートする同様のものはありますか、それとも自分で書くべきですか?
java - Java: JTree で XML ファイルを表示する方法
XML ファイルの内容を .xml 形式で表示する方法が欲しいですJTree
。カスタムTreeModel
(およびTreeCellRenderer
)を実装することにより、DOMを使用してこれをすでに達成しています。ただし、非常に扱いにくく (多くの回避策とハッカーが必要)、端がかなり荒いです。
JTree
SAXで解析されたXMLファイルの内容を表示する方法を知っている人はいますか?
ありがとう!
java - Java Swing:JTreeが「ユーザーオブジェクト」を表示する方法を定義するにはどうすればよいですか?
を使用する場合はJTree
、の「ユーザーオブジェクト」をDefaultMutableTreeNode
設定できます。これはどのような種類でもかまいませんが、表示するにはそのtoString()
値が使用されます。これは私が必要としているものではありません。
ユーザーオブジェクトの表示方法を変更するにはどうすればよいですか?
注:ツリーとユーザーオブジェクト間のマッピングを維持できるようにするには、ユーザーオブジェクトはとは異なるものである必要があります。String
c++ - Qt で複雑なツリー モデルを作成する
私は IRC クライアントを書いています (はい、別のクライアントです)。簡単に言えば。これのリストを保持するサーバーダイアログを書いています:
ネットワーク、チャネル、およびアドレス用の 3 つの異なるリスト ビューがあります。ユーザーが ID (コンボ ボックス) を変更したとき。ネットワーク リストビューは、その特定の ID のすべてのネットワークを検索します。ネットワークをロードすると、最初のネットワークが自動的に選択され、その特定のネットワークのすべてのチャンネルとアドレスがロードされます。
問題は、すべてのメモリとデータの読み込みを最小限に抑えるために、1 つのモデルに対して 3 つのビューが必要なことです。そのため、管理がはるかに簡単になり、多くの作業を行う必要がなくなります。
QColumnView を見ると、まったく同じです。しかし、サーバーダイアログを簡単に通過できるように、ビューはまったく異なるタブにあるため、1 つの正確なページにある必要はありません。
この複雑さを処理するための最良の方法は何だろうと思っています。情報は SQLite データベースに保存されます。私はすでにそれを抽出して保存するために書かれたクラスを持っています。モデリングだけが、このソリューションの厄介な部分です。
java - 状態を復元するための jtree の状態/展開されたノードを保存する
私はJTreeで作業しています。
どのノードが JTree で展開され、その状態を保存する (つまり、すべての展開されたパスを保存する) かを知る最善の方法を知りたいです。そのため、Jtreeを呼び出しmodel.reload()
ても折りたたまれたままではなく、元の状態をユーザーに復元できます。つまり、展開されたすべてのノードが展開されます。
gtkmm - アプリケーションをロックせずに Gtk::TreeModelColumn を大きなデータセットで埋める方法
Gtk::TreeModelColumn に大規模な (おそらくそれほど多くない - 数千のエントリ) データセットを入力する必要があります。アプリケーションをロックせずにそれを行うにはどうすればよいですか。処理を別のスレッドに入れても安全ですか? では、アプリケーションのどの部分をロックで保護する必要がありますか? Gtk::TreemodelColumn クラスだけですか、それとも Gtk::TreeView ウィジェットに配置されているのでしょうか、それとも周囲のフレームやウィンドウでさえありますか?