とうとう痺れが切れたので、 新しい ID を登録して再度申し込むことにした。 すると簡単に申し込み手続きを終えることができたではないか。 以前の ID では相変わらずキャンセル処理中である。 いったいどういう処理をしているものやら。
帰りがけにパソコンショップに立寄る。 Apple Pro Speakers と CaptyTV を購入。 これで部屋に散乱しているビデオカセットを整理できる。
スピーカーを箱から出して、 iPod に接続しようとしたら、 スピーカーのプラグが超ミニサイズでささらない。 iPod はミニサイズジャックである。 とてもがっかり。
帰りがけに電気屋に寄って超ミニプラグ(2.5mmφ)を ミニプラグ(3.5mmφ)に変換するアダプターを購入。 しようと思ったのにそのようなアダプターがない。 ミニプラグを超ミニプラグにするアダプターはあるのに。
帰りがけに電気屋に寄って超ミニプラグをミニプラグに変換するアダプターを購入。 しようと思ったのにそのようなアダプターがない。 二軒も回ったのに見つからない。 もしかしてそんなアダプターは存在しないのだろうか。
ネットで超ミニプラグをミニプラグに変換するアダプターはあるかと検索してみた。 いくつかの日記サイトでそのようなアダプターを購入したことが書かれていた。 しかしそのアダプターの型番やメーカーは書かれていない。 残念至極。 でもまあこの世に存在しているのが分かっただけでもありがたい。
Java でディレクトリツリーをブラウズする画面を作ってみた。 Swing の JTree を使って。 以下備忘のため The JavaTM Tutorial の JTree の使い方 の一部を纏めておこう。
1: DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); 2: createNodes (root); 3: final JTree tree = new JTree(root); 4: getContentPane ().add (tree);
まず、ツリーのルートノードとして使われる DefaultMutableTreeNode
のインスタンスを作成する(1)。
そしてルートノードの下にノードを作成する(2)。
その後に、ルートノードを JTree
のコンストラクタの引数にわたして、
ツリーを作成する(3)。
ルートノードの下にノードを作成するコードは以下のとおり。
1: private void createNodes (DefaultMutableTreeNode root) { 2: DefaultMutableTreeNode folder = null; 3: DefaultMutableTreeNode file = null; 4: folder = new DefaultMutableTreeNode ("Folder 1"); 5: root.add (folder); 6: file = new DefaultMutableTreeNode ("File 1.1"); 7: folder.add (file); 8: file = new DefaultMutableTreeNode ("File 1.2"); 9: folder.add (file); 10: folder = new DefaultMutableTreeNode ("Folder 2"); 11: file = new DefaultMutableTreeNode ("File 2.1"); 12: folder.add (file); 13: file = new DefaultMutableTreeNode ("File 2.2"); 14: folder.add (file); 15: file = new DefaultMutableTreeNode ("File 2.3"); 16: folder.add (file); 17: }
DefaultMutableTreeNode
のコンストラクタの引数は、
ユーザオブジェクト
(ツリーノードに対応するデータもしくはデータを指すオブジェクト)である。
ユーザオブジェクトは文字列であってもよいし、
カスタム名オブジェクトでもよい。
もしカスタム名オブジェクトで実装するなら、
toString
メソッドをオーバーライドして、
ノードを表示する時に使用する文字列を返すようにすべし。
ノードが選択された時の動作は単純である。 ツリー選択リスナーを実装してツリーに登録すればよい。
1: tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); 2: //選択が変化した時のリスナーを登録 3: tree.addTreeSelectionListener(new TreeSelectionListener() { 4: public void valueChanged(TreeSelectionEvent e) { 5: DefaultMutableTreeNode node = (DefaultMutableTreeNode) 6: tree.getLastSelectedPathComponent(); 7: if (node == null) 8: return; 9: if (node.isLeaf()) { 10: BookInfo book = (BookInfo)node.getUserObject(); 11: displayURL(book.bookURL); 12: } else { 13: displayURL(helpURL); 14: } 15: } 16: });
まずツリーのノードが一つだけしか選択できないようにする(1)。
イベントハンドラを生成し、ツリーに登録する(3)。
このイベントハンドラは TreeSelectionListener
インタフェースを実装する(3)。
イベントハンドラでは、
ツリーの getLastSelectedPathComponent
メソッドを使って、
選択されたノードを取り出す(5, 6)。 getUserObject
メソッドを使って、
ノードに関連付けられたデータを取り出す(10)。
ノードが選択された時のリスナーのほかにもいろいろなリスナーがある。
以上
もし Windows Explorer
のディレクトリツリーのようなインタフェースを作るのであれば、
ツリーのノードに File
オブジェクトを関連付けることになるだろう。
ただし File
クラスの
toString
メソッドはファイルのフルパスを返す。
そのためクラスを継承して、
ファイル名だけ取り出す toString
メソッドをオーバーライドする。
その際 File
クラスから派生させるのではなく、
DefaultMutableTreeNode
を継承して、
ユーザオブジェクトに File
オブジェクトを登録するのがよい。
歯医者に行くため早退しようとしたら、 上司からがっくりくるような一言をメールで貰う。 本当ならちょっとむっとくるような内容なのかもしれない。 とはいえそういわれても仕方がなくもあり、 そこまでいわなくてもいいだろうという感もある。 いずれにせよ精神状態がだいぶよいので、 外面的には平静を保つことができた。
帰りの電車を待つ間、 ふと前を見ると 女子大生と思われる子のマフラーが大変なことになっていた。
昨夜だんだん昨日の上司のメールが気になりだして、 どんどん胸の中で膨らんできた。 何をしても落ち着かない。 いらいらというのでもなければ、 そわそわというのでもない。 ずんと腹の下に何かが居座って動かないでいるようなのだ。
それで昨日は長めに効く薬を飲んでおいた。 気がついたら夜 7 時すぎ。 晩飯を食ってボーッとして寝る。 薬は昨日と同じ。
気がついたら夜 7 時すぎ。 晩飯を食ってボーッとしているうちに眠れなくなる。 なんか痛いなと思って右足の裏を見ると縦に 10cm くらいの傷があった。 いつのまにかカッターで足を切っていたらしい。 切ったといっても深くはない皮 1 枚くらい。 切ったとしたら昨日の晩か。
明日会社に行きたくないと思っている自分がいる。 グッドモーニングベトナムの What A Wonderful World を聞いて、 涙なんか流してたりして。 このまま夜が明けないでくれたらいいのに。
そういうわけにも行かないのでとにかく布団に入る。 しかし寝付けない。
なんとなく、 寝られないのは明日の朝いつものように 6 時半に起きられないのではないかという、 不安のせいなんじゃないかとひらめく。 深夜 2 時、もう一風呂浴びて、 薬を寝る前と同じ量また飲んで横になる。 もう 6時半だろうが 7 時半だろうが、 19 時半だろうが構うものか。