えーと、現在の作業状況だと休出した方がよかったような気がしますが、
どうにもそういう気分になれず、休出しませんでした。
それとこれを上長に言ったら「また?」とか言われそうで・・・。
今週も残業しまくります・・・。
昨日寝たのが遅かったせいで、今日起きたのは11時ごろ。
それからDQMJ2。
いい感じにドラゴンソルジャーが育ったのでレオソードに殴りこみ。
スクルトとバイシオンで強化して、ジゴスパークが来るたびにベホマズン。
あとはドラゴンソルジャーの2回攻撃で難なく倒せました。
途中危なかったけどね。
いてつくはどうのあと全体攻撃、そしてジゴスパーク。
痛恨がでてたら死んでたな。
まだザオリク用意できてないんすよ。
まあ、途中はどうあれ倒して最終バトル、アロマ戦。
・・・、コイツよわ!
最初に痛恨がでた時はヤバイと思ったけど、それでも即死に及ばず。
すぐに回復してフルボッコにしました。
そしてエンディングへ・・・。
スタッフロールの前にDQMJ2の出現モンスターリストが出てきました。
捕まえてないやつは?になってました。
見てて思ったんですが、8のモンスター多いっすねー。
それと、9のモンスターを1匹も捕まえてなかった・・・。
100匹以上捕まえて1匹も、というのはなんかすごい気がする。
スタッフロールが終わってからクリア後の世界へ。
再びレオソードと戦うらしいんですが、
その前にちょっと配合してレベル上げ。
で、途中で眠くなったので寝ました。
起きたらいい感じに夕食時。
食後はプログラミング。
今日仕事に行かなかったので、また家で仕事。
正確には仕事のための準備。
今回はオプションダイアログの改造。
改造内容は、親フレームが最小化しているときのダイアログ位置調整と、
表示メッセージの自動折り返し。
JOptionPaneのshowOptionPane()で表示されるダイアログは
親コンポーネントの中央に表示されます。
しかし、親コンポーネントがフレームで、しかもそれが最小化されていると、
ダイアログはディスプレイの左上に表示されます。
これは、最小化されているフレームの位置が(0,0)になっているためだと考えられます。
で、親がフレームで最小化されているときはディスプレイ中央に表示するようにしてました。
まあ、やることは簡単。
テキトーにshowOptionDialog()をオーバーライドして、
その中はshowOptionDialog()の中身と同じようにする。
途中のダイアログを作ってるところ(createDialog()を呼んでるところ)のあとに
親コンポーネントがフレームで、フレームが最小化されていたら
setLocationRelativeTo(null)を呼んであげるだけ。
これくらいデフォルト動作でやってくれよと思うんですけどね・・・。
別にオーバーライドしなくてもテキトーなメソッド作って
showOptionDialog()の中身をそのまま実装してもいいと思います。
で、次にメッセージの折り返し。
これが厄介だった!
createDialog()のあとにダイアログのサイズをsetPreferredSize()で調整すると、
メッセージ部分はJLabelなのでクリッピングされてしまいます。
一応JOptionPaneにはgetMaxCharactersPerLineCount()というメソッドがあり、
これをオーバーライドすれば決まった文字数で自動的に折り返せるとのこと。
が、コイツがかなり馬鹿で、単語ごとに計算するんです。
なので、日本語みたいに空白が単語の区切りにならない言語だと
いつまでたっても折り返してくれず、ながーいメッセージだと画面をはみ出ます。
単語ごとになってるというのを知るまで時間がかかったわー・・・。
APIに書いてくれればいいのに。
JOptionPaneのメッセージの部分の方はObjectになっていて、
文字列以外のものも入るので折り返しできるJTextAreaを置くことも考えたんですが、
JTextAreaは折り返したあとのサイズを自動計算してくれないので
メッセージダイアログのボタンが隠れてしまいます。
仕方がないので、自動折り返しメッセージを表示するパネルを自作しました・・・。
折り返しメッセージ用のパネルのレイアウトはBoxLayoutを使用します。
これで1行ごとのメッセージを入れたJLabelを縦に並べられます。
1行ごとの切り取りはSwingUtilities2のクリッピングのメソッドを元にしました。
処理としては一文字ずつ見て、その文字の幅を加算していって、
規定の幅になったらそれまでの文字列をJLabelにセット、パネルに追加して
というのを、メッセージを全部出力するまで繰り返します。
あ、もちろん途中で改行コードがあってもパネルにラベルを追加しますよ?
あとはこのパネルをメッセージの引数のところにぶち込んでやるだけ。
これで自動的に折り返してくれます。
単語単位にやりたかったら自分でそういう実装にするか、
getMaxCharactersPerLineCount()をオーバーライドしてください。
ちなみに、この方法だとダイアログの大きさではなく、
メッセージを表示する部分の大きさでしか指定できませんけどね・・・。
と、クソJavaのせいでこんな時間になってしまった。
もっと色々用意してくれるといいんだけどね。
ああ、早く終わったらゲームやろうと思ってたのに。
さて、明日仕事だし、もうそろそろ寝るか。
明日は2週間ぶりのジャンプ。
休むわけにはいかない!
[0回]