0

GUI クラスとは別のクラスで、JTree とそのモデルを作成します。JTree のデータはファイルから抽出されます。

GUI クラスで、ユーザーはファイル システムから AWT リストにファイルを追加できるようになりました。ユーザーがリスト内のファイルをクリックした後、JTree を更新します。JTree の変数名は schemaTree です。

リスト内の項目が選択されたときの次のコードがあります。

private void schemaListItemStateChanged(java.awt.event.ItemEvent evt) {
        int selection = schemaList.getSelectedIndex();
        File selectedFile = schemas.get(selection);
        long fileSize = selectedFile.length();
        fileInfoLabel.setText("Size: " + fileSize + " bytes");

        schemaParser = new XSDParser(selectedFile.getAbsolutePath());

        TreeModel model = schemaParser.generateTreeModel();
        schemaTree.setModel(model);
}

受け入れられた回答に対応するようにコードを更新しました。リストで選択したファイルに基づいて、JTree が正しく更新されるようになりました。

4

2 に答える 2

2

Component.addAPI ドキュメントから。

注: 表示されているコンテナーにコンポーネントが追加されている場合、新しいコンポーネントを表示するには、そのコンテナーで validate を呼び出す必要があります。複数のコンポーネントが追加されている場合は、すべてのコンポーネントが追加された後、validate を 1 回だけ呼び出すことで効率を向上させることができます。

repaint表示されていないコンポーネントに対してandを呼び出しvalidateましたが、これは有効ではありません。mainPanelの後にこれらのメソッドを呼び出す必要がありますadd。また、効果的に合体するrevalidateため、よりも優れている傾向があります。validate

于 2009-04-16T18:53:59.260 に答える
1

私はあなたの質問を理解しているかどうかわかりませんが、試してみます...

正しいことは、私見:

  • ファイルを取得する
  • ファイルから新しい TreeModel を作成します
  • モデルを JTree に渡す

擬似コードでは、次のようになります。

File newContent = getSelectedByUser(...);
TreeModel newModel = new MyFileBasedTreeModel(newContent);
//this next part must be done in the EventDispatcherThread
myTree.setModel(newModel); 

その後、再描画などを呼び出すことなく、JTree が更新されます。

それが役に立てば幸い

于 2009-04-17T13:27:55.120 に答える