[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re:
>ありがとうございます!
>感謝感激です。お教え頂いたソースをベースにして作成していこう
>と思います。
投稿したソースはただ単にHTML Table形式でコンソール出力するだけです。
TreeTable.java では java.util.Vector を使って検索結果を蓄積していますが、
ツリー・コントロールのようなものとして表示するには Vector ではなく
javax.swing.tree.DefaultMutableTreeNode を使う必要があります。
TreeTable.java で Vector に addElement() している個所を、
DefaultMutableTreeNode の add() に書きかえる必要があります。
TreeNode.java では HTML の Table として表示するために、
次の3つのものを addElement() していました。
0: "<TR><TD>" ... "</TD>" という文字列
1: ファイル/ディレクトリー名
2: ノードの深さ
javax.swing.JTree を使うのであれば、ファイル/ディレクトリー名を
add() するだけでいいと思います。
TreeTable.java では、retrieve() メソッドに String pref という引数と
int node_depth という引数をとっていました。
> public void retrieve(File dir, String pref, int node_depth) {
DefaultMutableTreeNode を使うのであれば、
public void retrieve(File dir, DefaultMutableTreeNode) {
こんな感じで良いでしょう。
> tree.addElement(before); // "<TR><TD>...</TD>"
> tree.addElement(subdirs[i].getName()); // ディレクトリー名
> tree.addElement(new Integer(node_depth)); // 深さ
> retrieve(subdirs[i], pref + next, node_depth + 1);
ここは、
DefaultMutableTreeNode node =
new DefalutMutableTreeNode(subdirs[i]);
parent.add(node);
retrieve(subdirs[i], node); // 再帰探索
こんな感じになると思います。
あ、そうだ。
いちばん上のノードを最初に add しておく必要があります。
>public class TreeTable {
> private static final String LEAF = "<TD>├─</TD>"; // 途中の子供
> private static final String BOTTOM = "<TD>└─</TD>"; // 最後の子供
> private static final String SUBTREE = "<TD>│ </TD>"; // 途中の子供の下位ノード
> private static final String BLANK = "<TD> </TD>"; // 最後の子供の下位ノード
>
> static int depth = 0; // 全体の深さ
この depth の代わりに
private DefaultMutableTreeNode root = null;
というのが必要です。(良く考えたら static にしてはいけなかったと思う^^;)
あと、
> public static void main(String[] args) {
> TreeTable ttable = new TreeTable();
> ttable.tree.addElement("<TR>"); // "<TR>
> ttable.tree.addElement(args[0]); // 最上位のディレクトリー名
> ttable.tree.addElement(new Integer(0)); // 深さ0
> ttable.retrieve(args[0]);
> ttable.showTree();
ここは、
public static void main(String[] args) {
TreeTable ttable = new TreeTable();
ttable.retrieve(args[0]);
ttable.showTree();
これだけで良くて、
> public void retrieve(String dir) {
> retrieve(new File(dir), "<TR>", 1);
> }
ここを、
public void retrieve(String dir) {
retrieve(new File(dir), null);
}
こんな感じに変える必要があります。
parent が null だと実行時に NullPoniterException が発生するので、
retrieve() の適当な個所に
if (root == null) root = node;
という感じの行を追加してください。
>その前にまずjavaの基本から学ばねばなりません。
>完成まで時間がかかると思いますが頑張って作ります。
青柳さんの『Java APIプログラミングガイド』は名著なので1冊常備してください。
ただしこの本は JDK 1.0 の頃の本なので、JTree や DefaultMutableTreeNode の
ことは書いてありません。
(青柳さんは新しい本を書いているようで期待してます)
私は読んだことがないのですが、『Javaプログラミング・クイックリファレンス』という
JDK 1.1 以上に対応したサンプルソースがたくさん載っている本があります。
この本もなかなか評判良いです。
--
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)