今月になって、SpeedNetの無線サービスが我が家のある地域でもOKになりました。またされることを覚悟したけど、よかった、よかった…。来週に工事に来ます。これで、CATVのインターネットとも縁が切れるかな。豪快に光ケーブルというところまでは行かないで済みそうです。たぶん、スピード的にはあまり変わらないとは思います。いまのところは最高で80KB/sくらいですが、SpeedNetが額面とおりの早さならもうちょっと早いでしょうけど、まあ、ベストエフォートですからね。
さて、X-Partyが先週にありましたけど、すみません、全然記事になりませんでした。私が行った時間では、すでにホールにすら入ることができず、上の階に居場所は確保しましたが、ステージはまったく見えない状態です。MacWIREの濱田さんにしっかり写真を撮られたけど、いろんな人とおしゃべりしていただけになりました。座るのはおろか、しゃがむというスペースもないくらいで、満員電車の中のようでした。おまけに帰りの電車も満員の埼京線…で、最終の武蔵野線には乗れなかったし、PowerBookも当たらなかったし…。そんなところです。X-Partyのイベントは、マイクロソフトが特別協賛になっていましたけど、要はマイクロソフトをはじめ、サードパーティがユーザに対してプレゼンテーションする場というところです。あれだけぎゅう詰めだったホールだと、一度入ってしまったら出られないから、その意味ではしっかりプレゼンテーションは聞かされたのじゃないでしょうか。
では、プレゼントの当選者です。敬称は略させていただきました。ちなみにMax本は10人、WO本は26人の応募でした!ちなみに、オーム社さんからは書籍のカタログをいただいていますので、欲しい人は私までメール下さい。書籍は、今日中にでも投函します。
Max本当選者:小林茂 WebObjects本当選者:野間 健一、稲垣、ユール
それから、過去最高額と思われるプレゼントがあります。なんでそんなもん手に入れたかって? 実は、たまたま近くの芝川に洗濯に行ったところ、モモがどんぶらこと流れてきて、それをパカっと割ると、打ち合わせとおりその中に入っていたという次第です。ほらー、毎日MDOnlineを見ているといいこともあるでしょ(当たればですが…)。
===============================プレゼント
Mac OS X Server 10.1 10クライアント(???提供-1パッケージ)
http://www.apple.co.jp/macosxserver/index.html
――――――――――――――――――――――――――――――――――――
申し込み方法:<msyk@mdonline.jp>宛にメールをする(以下の共通事項参照)
メールのタイトルは、【X Server希望】
Appleから、末尾にあるような開発情報が掲載されたが、これを踏まえて、Mac OS X 10.1でJavaでのプログラミングを行う場合に勘案しないといけない点を説明しておこう。Mac OS X 10.1に対応したDeveloper Toolsとして、クラスのブラウズ機能が追加されたProject Builder 1.1がリリースされたが、Javaのプログラムを開発していて、いきなりProject Builderがフリーズしてしまうという状況になってしまい困った人も多かっただろう。Appleからの情報では、WebObjects 5となっているが、実際にはSwingなどを使ったPure Javaのプログラミングをしている場合、さらにはCocoa-Javaでも同様な症状になる。つまり、問題のポイントは、コンパイラのjavacにあると見てよいと思われる。
まず、コンパイラに失敗すると、ビルド結果を表示している部分にエラーメッセージが文字化けで表示されるとともに、Project Builderが応答しなくなる。そして、強制的に終了しなければならなくなる。これを防ぐ方法がAppleから公開されたが、すでにメーリングリストでも公開されてもいた。方法は次の通りだ。まず、「プロジェクト」メニューの「アクティブターゲットを編集」(Command+option+E)を選択して、ターゲットの設定を表示する。そして、「ビルド設定」のタブを表示する。そして、スクロールすると、いちばん下のところに「ビルド設定」という一覧がある。そこに「JAVA_COMPILER_FLAG」という項目があるが、イコールの右側は空欄になっている。そのイコールの右側をダブルクリックすると文字入力できるようになるので、そこに「-J-Dfile.encoding=UTF8」と指定する。いちおう、これだけでコンパイルエラーはきちんと日本語で表示され、コンパイルに失敗したときにフリーズするということはなくなる。ただ、一部まだ文字化けメッセージが見られるので、それを嫌うのなら、さらにコンパイル設定に次のように設定を追加する。まず、リストのどこかを選択して、enterキーを押すと「BUILD_SETTING」と書かれた新しい行が追加される。BUILD_SETTINGの部分をダブルクリックして、「OTHER_JARFLAGS」と書き換える。そして、その行のイコールの右側は前と同様に、「-J-Dfile.encoding=UTF8」と指定する。こうすれば、コンパイル時の基本的な問題はクリアされる。
しかしながら、ここでソースコードのエンコーディングの問題が発生する。ソースをすべてアスキーコードの範囲内(つまり1バイト文字)で記述している場合には問題は生じないが、文字列やコメントに日本語があると無意味にエラーが出てしまう。ソースファイルのエンコーディングは、最初は「日本語(Mac OS)」となっているがこれはおおむねシフトJISである。なお、エンコーディングは、ソースファイルに挿入ポイントがある状態で、「形式」メニューの「ファイルエンコーディング」から選択できる。もちろん、前期のビルド設定で追加した指定はコンパイラ自身が読み込むファイルのエンコードがUTF-8であるという指定である。従って、ファイルのエンコードについては結果的には「UTF-8」を選択することで問題はくなる。
では、ここで、Non-lossy ASCIIにしたいところであるが、これにすると、バックスラッシュ1文字がファイルの中では2文字のバックスラッシュになってしまう。やはり、ソースファイルのエンコーディングはUTF-8しか選択肢はなさそうだ。なお、バックスラッシュの入力方法も迷うところだ。実は¥記号を入力すると、バックスラッシュとは異なる文字になる。このあたりはUnicodeに厳密なのだろう。そこで、1つは、ことえりのパレットを使って入力すれば良い。文字パレットを表示して、「ユニコード表」を選ぶ。そして、文字コードが005Cがバックスラッシュである。別の方法は、システム環境設定の「地域情報」にある「キーボードメニュー」から、「British」を選択しておく。すると、キーボードメニューにBritishが追加されるのでそれを選択すると、JISキーボードだと]キーがバックスラッシュとなる。キーについては、UtilitiesフォルダにあるKey Capsで確認しよう。いずれにしても、一度入力しておいて、コピー&ペーストするのが手軽であるだろう。
こうした問題は、おそらく次のProject Builderのリリースでは修正されているとは思うのであるが、本質的ではない部分で悩まされることに違和感を感じる人もいることは確かだ。次回のリリース以降は素直に開発に取り組めるデフォルト設定になることを期待したい。
関連リンク:Mac OS X 10.1でWebObjects 5をお使い頂く際のご注意
カテゴリ:Cocoa, Java, WebObjects, ProjectBuilder/Interface Builder
新しいソフトが出てくるときには、すんなりとは行かないものだ…などとなれっこになってしまった感もあるが、やはりiTunes 2もどたばたを繰り広げてしまった。iTunes 2の配付は米国時間で2001年11月2日より始まったが、次の日にかけて公開されていたMac OS X版のiTunes 2が、実は複数のパーティションのあるシステムで、パーティションの中身が消えてしまうというインストールスクリプトの不具合があったのである。なお、その後に、Norton Utilitiesなどで復活できるというアナウンスがあったものの、いずれにしても、問題の発生するインストーラを含むiTunes 2はユーザの手にばらまかれてしまった。その後、Ver.2.0.1として、インストーラを修正したものが公開された。どうやら、日本語版として配付されたときにはVer.2.0.1になっていたことや、あるいはソフトウエアアップデートでのアップデートもされないのか、あるいは準備されていない状況のようだったので、情報を早耳でキャッチした人たちの一部が被害に遭っているというところだろう。なお、複数のパーティションがある場合に必ずしもファイルが消えるわけではない。根本的な問題はインストーラのシェルスクリプトで、古いiTunesを削除するところのパス指定をクォーテーションでくくっていないため、ボリューム名に空白があった場合には予期しないパスを指定することになり削除作業をしてしまう点にあるようだ。この点はAppleに限らず、開発者も含めて要注意なポイントであることは確かだろう。
そして、インターネットラジオもやはり様子が変だ。サービスがとまったKerbangoに代わって確かに「チューニングサービス」によってラジオ局が出てくるようになったが、リストの上では従来のバージョンとの違いはないと思われる。ラジオが聞けないという声もあれば、聞けるという声もあるが、いろいろなジャンルを見てみると、ジャンルごとに、ほとんどの局が聞ける場合と、ほとんどの局が聴けないジャンルがあるようだ。50s/60s Pops、70s Pppsあたりは聞けるのだが、JazzやClassic Rockはほとんど聞けない。何度も更新をやってみたけど、やはり同じであった。ラジオ局は外部の会社のサービスである…と言えばそれまでだけど、要はチューニングサービスのリストはチェックして提供しているとは到底思えない。米国のディスカッションボードでは、live365.comを使えばいいでしょうといったことが書かれているが、live365.comはいちおうiTunes対応ということになっているので、その意味では安心だ。
とまあ、釈然としないことはあっても、機能アップな点もやはり見のがせない。1つは、イコライザやエンハンサがついたのはなかなかいい点だ。だいたいサウンドはスピーカーや設置環境、あるいはヘッドフォンによってけっこう音の違いがある。ステレオセットならともかく、パソコン環境では細かい調整がしにくいというのが一般的だったけど、iTunesに音質調整の機能がついたのはその点でより便利になった。また、エンハンサーはガンガンならしたいときにはアップし、BGM的に静かにならしたいときなどではダウンすることによって、音の雰囲気全体を調整できる。こうした機能は確かに便利になったと言えるだろう。
関連リンク:iTunes 2
カテゴリ:メディアプレイヤ
私の会社では、WebObjects開発や運用に関するご相談を承っています。そこで、ミスというほどではないものの、多くの方が陥りがちな注意点についてお話します。
1.大文字小文字
アプリケーション名、クラス名、Entity名、WOComponent名を、必ず大文字で始めなければいけません。これはどちらかといえば慣例なのですが、慣例に従っていないソースは読みにくくなってしまうことが多いです。クラス名を大文字で始めるのは他の環境でも慣例となっていると思いますが、Cocoaの場合Entity名とWOComponent名はクラス名として使われますので、これらに関しても慣例が適用されるわけです。
なお、メソッドやメンバは、小文字で始めます。EOModelのAttributeもメンバとして使われますので、小文字で始めます。
また、他の言語から入ってこられた方は、app_nameのように、変数名を"_"で区切る癖をお持ちのようですが、これはあまりCocoaっぽくないですね(笑)。Cocoaは伝統的に単語の切れ目を大文字にしてつなぐという慣例があります。前記の場合ですとappNameと書きます。EOF/WOFなどのAPI名もこのようになっているものが多いと思います。クラス名は比較的短めですが、メンバは長いのが多いですね。また、appと略したりしないでapplicationとフルスペルで書きますし、まるで文章のように長いメソッド名も少なくないです。馴れてしまえば、こっちの方が使いやすいし忘れにくいと思います。
....慣れれば、ですが。
これらはコンパイラを問題なく通ってしまいますが、他の人と一緒に仕事をする場合には特に気をつけた方がいいと思います。
2.Entity名とWOComponent名
ごくまれに、WOBuilderでWOComponentを開いても、クラスブラウザの部分に正しくメンバが表示されないことがあります。特に、Session/Applicationが表示されないため、何か悪いことが起こっているのではないかと再起動したりしてみますが、それでも直りません。
プロジェクトの中に、同じ名前のEntityとWOComponentがある場合に、このような現象が起きます。
前述の通り、Entity名もWOComponent名もクラス名として扱われます。WOComponentはjavaソースが必ず生成されますので、クラスがあるということは明確に意識できるのですが、Entityではcustom eoを作らない限り、それがクラスとして扱われるということを時として忘れてしまいます(私だけでしょうか)。
ので、これは好みだと思いますが、私はEntityは、そのままの名前を付けますが、WOComponentには"Page"、"Box"などの接頭/接尾語を付けて、それがコンポーネントであることを明示します。普通のページは"Page"、再利用コンポーネントには"Box"を使っています。
あと、これも私だけのアヤマチかもしれませんが、ついうっかりEntity名を"Members"というように複数型にしてしまいます。が、これをやるとto manyリレーションの名前を付けるときに悩まなければなりません。気をつけましょう。
3.パス
Projectのパスに日本語が含まれてはいけません。ProjectBuilderが落ちたり、WOBuilderでコンポーネントを開いてみてもクラス表示が出なかったりします。実はこれちょっと有名な症状で、homeworkユーザ会MLでも話題になったことがあるのですが、私自身が見事にはまってしまいました。ままままままだまだ修行が足りません。
また、パスに関してはもう一つ問題があります。それは"WO Support"のように、間にスペースの含まれるパスです。問題なくビルドできるし、WOBuilderでも開くことができるのですが、いざアプリケーションをLaunchしようとすると、タイプ1エラーが出てしまいます。
これはMac OS XでもWindowsでも起こります。特にWindowsでは、ユーザのホームディレクトリのすぐ上にスペースが含まれていて、見てもすぐにはわからないようになっていますので、なかなか発見できません。『パスが間違っているならそう言ってくれよお』、てなもんです。
些細な点ですが、見落としがちなので注意してください。
4.リレーション名
ついでに、リレーション名ですが、私はto manyには"array"、to oneでは"eo"を接頭語として使っています。別に何でもいいんですが、同じ接頭語を付けるとWOBuilderの上でソートされた時に同じところに固まりますので、何かと便利です。EOModel上でAdd Relationshipすると、Entity名が使われますが、これはそのままにしないで、ちゃんと意味をもった名前を付けましょう。WOBuilder上で操作する場合には、マウスカーソルをあわせればEntity名が表示されますので、あえてEntity名を名前に含める必然性は低いと思います。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
WebObjectsが初めての開発環境、という方は少ないと思います。ので、他の環境での慣れた書き方があれば、そちらを優先してかまわないと思います。ですが、WebObjectsはモジュールを再利用しやすい造りになっています。そのためには、WebObjectsの慣例に基づいた書き方をした方が、「市場」が大きくなり、チームとして開発する場合の効率も向上します。
私の場合? 私は意識して書き方をかえた訳ではなくて、WOF/EOFを使っているうちに今のスタイルに変わってしまいました。毎日のようにremoveObjectFromBothSidesOfRelationshipWithKey()とかsetPageRefreshOnBacktrackEnabled()なんてメソッドを書いていれば、嫌でもスタイル変わっちゃいますよね(笑)。
ただ腱鞘炎には良くないですね....私はとうとう慢性化してしまったようです。皆さんはご注意ください。もっとも、今のご時世、腱鞘炎になるほど忙しいのは感謝すべきことなのでしょう....それで私の手首の痛みが収まるわけではありませんが。ご時世柄、現金よりも売り掛け金だけが増えて行きます。これから年末へむけて、ウチのような零細企業には何かとしんどい季節ですが....WebObjectsで稼ぎましょう。you can do it!!
[倉橋浩一/テクニカル・ピット]
関連リンク:WebObjectsのページ
カテゴリ:WebObjects, 倉橋浩一、じつはWebObjectsで飯食っています
WebObjectsでEJB(Enterprise JavaBeans)などを含むJava 2 EE(Enterprise Edition)を使う方法の方針などを示した12ページほどのPDFが掲載された。WebObjectsには、データベースなどのデータソースをオブジェクト化して高度な処理や開発ツールとの連動を可能にするEnterprise Objectsの機能があるが、一方のサーバサイドのJava環境として、Java 2 EEがあり、EJBという同様なデータベースをオブジェクトとして扱うことを可能にする機能がある。掲載されたPDFでは、両者は補完的なものであるとしている。つまり、WebObjectsとJava 2 EEは並立して存在するものであるということだ。そして、WebObjectsのアプリケーションから、EJBを利用したデータベース処理を行う方法について、概念とサンプルのプログラムについても示されている。1つの方法は、JNDI(Java Naming and Directory Interface)を通じてEJBのインスタンスを取得し、その情報をもとに、RMI(Remote Method Invoke)やIIOP(Internet Inter-ORB Protocol)を利用して、EJBのインスタンスを取得したりメソッド呼び出しを行うという手法である。別の方法としてJMS(Java Messaging Service)を使った方法も記載されている。いずれにしても、すでにEJBベースで構築されたバックエンドを利用するアプリケーションをWebObjectsで構築する方法の方針は説明されたことになるだろう。WebObjects自体もEJB対応するということはすでに公表されているが、どういったインプリメントになるかは定かではない。この文書からもしかすると、そのあたりも読み取れるかもしれない。
関連リンク:WebObjects and J2EE: A Complementary Approach
カテゴリ:Java, WebObjects
Knowledge Baseに掲載されたiTunes 2とiPod関連の文書について、まとめて紹介しておこう。11月2日にiTunes 2が公開されたが、その直後にたくさんの文書が公開されている。
◇iTunes 2.0.1 for Mac OS X: Information and Software
http://www.info.apple.com/kbnum/n120074
iPodに対応したiTunes 2のMac OS X版をダウンロードするにはこのページから。なお、バージョンはVer.2.0.1となっている。(なお、Ver.2.0のインストーラには問題があって、複数のパーティションやボリュームを利用している一部のユーザで、ファイルが消えてしまうというトラブルがあるため、急きょ、2.0.1がリリースされた。)
◇iTunes 2 for Mac OS 9: Information and Software
http://www.info.apple.com/kbnum/n120073
Mac OS 9版のiTunes 2。執筆時点では英語版のみが掲載。
◇iTunes 2: Some Sound Format Files Cannot Be Played on an iPod
http://www.info.apple.com/kbnum/n60934
iTunes 2でサポートしているサウンドファイルのフォーマットのうち、iPodでは再生できないものがある。具体的には、snd、NVF (Nomad voice files)、QuickTime、mp2、mp1である。なお、aiffやwavについてはiPodでも再生ができる。
◇iTunes 2: Battery Saver Option Dimmed in Mac OS X
http://www.info.apple.com/kbnum/n60933
Mac OS X版のiTunes2では、バッテリの節電オプションの機能は利用できなくなった。
◇iPod: Computer Stops Responding if Put to Sleep When iPod is Connected
http://www.info.apple.com/kbnum/n60929
iPodを接続したMacintoshがスリープすると、Macintoshはフリーズしてしまう。接続中にはスリープしないように設定するなどの注意が必要である。
◇iTunes 2: How to Burn an MP3 CD
http://www.info.apple.com/kbnum/n60924
MP3 CDの作成方法が説明されている。MP3 CDなら、150曲で10時間ほどを1枚のディスクに記録できる。環境設定から「CD作成」のタブを選ぶと、通常のCDなのかMP3 CDなのかを選択するラジオボタンが出てくる。
◇iTunes 2: How to Set the Play Order of Songs on an MP3 CD
http://www.info.apple.com/kbnum/n60931
iTunes 2でMP3 CDを作成するときの曲順設定方法について解説されている。MP3 CDのプレイヤは、曲名のアルファベット順で再生を行い、トラック番号順には再生されないのが一般的である。そのため、曲名の前に数字を付けるなどして対処することになる。
◇iTunes 2 for Mac OS X: What to do if you have experienced data loss during installation
http://www.info.apple.com/kbnum/n112029
iTunes 2 for Mac OS Xをインストールしたときに、ディスクの中身が消えてしまったというトラブルに対して、ファイル復旧のユーティリティを使って元に戻せるたことを報告してきたユーザも存在する。Norton Utilities for the MacintoshないしはTechTool Proによってリカバーができたということだ。ただし、消えてしまったパーティションに対して何も作業をしないようにしてすぐに復旧作業をする必要がある。(なお、この内容は、Knowledge Baseに記載された内容をお届けしているものであって、MDOnlineが消えたファイルを復旧できることを保証するものではない。)
◇iTunes 2: Includes Updated Disc Burning Software
http://www.info.apple.com/kbnum/n60936
Mac OS 9版のiTunes 2には、CD-R書き込みのための機能拡張であるAuthoring Support 1.1.4も含まれており、曲間のギャップを0にした書き込みができるなどのアップデートが行われている。また、Mac OS X版も、同様な機能を追加したシステムのフレームワークにアップデートされる。
◇iTunes 2: Radio Tuner Temporarily Hidden While iPod Updates Music Library
http://www.info.apple.com/kbnum/n60927
iTunes 2とiPodを同期しているときには、ラジオチューナーは使えないようになる。
◇iTunes 2: How to Adjust Sound Enhancer
http://www.info.apple.com/kbnum/n60926
iTunes 2ではAppleが開発したサウンドエンハンサーを搭載しており、サウンドの聴感をより高めることができる。環境設定の「エフェクト」のタブで「サウンド拡張」でその度合いを設定できる。(サウンドエンハンサーの効果は音のめりはりが強くなる感じである。)
◇iTunes 2: When Radio Tuner Listings Are Refreshed
http://www.info.apple.com/kbnum/n60925
ラジオチューナーの一覧が更新されるタイミングについての説明がある。「更新]ボタンをクリックしたときやiTunes 2の再インストール後にラジオチューナの一覧を呼び出したとき、そして、曲一覧のジャンルの三角部分をクリックして閉じたときと説明されている。
◇iTunes 2: 22 Preset Equalizer Settings
http://www.info.apple.com/kbnum/n60930
iTunes 2のイコライザに設定されているプリセットの名前一覧を参照できる。
◇iTunes 2: Audio CD Skips When Played on Iomega Predator Drive
http://www.info.apple.com/kbnum/n60928
Iomega Predator ZIPCD1024EXTでオーディオCDを再生すると曲をスキップしてしまう。内蔵のCDドライブを使って再生すればよい。
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ
AppleのInternet Developerのサイトに、オープンソースのデータベースに関連した文書が掲載された。つまり、MySQLやPostgreSQLについての解説である。データベース自身の解説よりも、ユーザアカウントの作り方あたりが、実際的な情報だろう。たとえば、MySQLのプロセスはrootで稼働させるのではなく、mysqlなどの名前にしたログインできないアカウントで運用することが推奨されている。Linuxなどではそうしたアカウントの作成方法などはいろいろなところで説明されている。一方、Mac OS X Serverだと、管理ツールを使って作成するユーザだと、細かいところまでの設定ができない場合がある。そこで、公開されている文書では、MySQLの稼働用アカウントの作成をNetInfo Managerで行っている。NetInfo Managerでのユーザ作成を行い、そのユーザを指定してのMySQLのビルド方法などが説明されている。
関連リンク:Open Source Databases: Overview and Installation
カテゴリ:ユーザ管理, データベース, Mac OS X Server
ファイルメーカーは、データベースソフト「ファイルメーカーPro」の開発版である「ファイルメーカー Developer 5.5」を、2001年11月下旬に発売する。Mac OS Xにも対応しているMac版と、Windows版があり、それぞれ79,000円となっている。通常のファイルメーカーProとの違いは、ファイルメーカーを利用したカスタムソリューションを開発するための素材が含まれていることだ。データベースの設計内容をレポートする「データベースデザインレポート機能」や、スクリプトのデバッグ機能が追加された。また、従来からの機能としては、無償で配付可能な実行専用アプリケーション作成機能、さまざまなカスタマイズ、プラグイン開発に必要な素材、XML関連の情報、JDBCドライバ、ソリューション事例などが含まれる。なお、Developer版のアップグレードは49,000円となっている。
関連リンク:新製品「ファイルメーカー Developer 5.5」を発売
カテゴリ:データベース, 各種プロダクツ
Technical Q&Aに、Mac OS Xのカーネル機能拡張についての文書が掲載された。デバイスを装着したときに自動的にドライバがロードされるようにはなっているものの、起動時にドライバが組み込まれないという点についての回答である。その場合は、plistファイルにあるCFBundleVersionを確認し、ビルド設定にあるMODULE_VERSIONの指定と同じになっているかを確認する。バージョンが違うと、起動時ではエラーとなり、system.logにエラーが残っているはずである。
関連リンク:QA1087: Issues with boot time KEXT loading
カテゴリ:Technical Q&A, 周辺機器, Mac OS X
SwingのコンポーネントであるJTreeを、独自に作成したTreeCellRendererを使って描画しようとしているが、ルック&フィールをAquaにするとセルの描画がうまくいかず1行分しか表示されないという問に関する回答がTechnical Q&Aに掲載された。きちんと表示されるようにするには、JTreeに対してsetRowHeight(0)を呼び出し、セルの高さに合わせて自動調整するように設定しなければならない。また、setRowHeight()は、コンポーネントのインスタンス化の直後や、ルック&フィールを変更した直後に呼び出す必要がある。なお、Windowsのルック&フィールでのバグなどについての注意点についても言及されている。
関連リンク:QA1091: Rendering Multi-line text in JTree nodes
カテゴリ:Technical Q&A, Java