- PR -

Java のバージョンによってActionListenerのイベント受け取り方法が

投稿者投稿内容
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2003-12-14 16:05
変わってしまって困っています。

http://202.226.153.50/cobra/public_html/easy_draw.java

こちらを javac easy_draw.java でコンパイルすると、

: easy_draw.java は推奨されない API を使用またはオーバーライドしています。
: 詳細については、-deprecation オプションを指定して再コンパイルしてください。

こういう警告が出るので、

http://202.226.153.50/cobra/pubblic_html/easy_draw3.java

こんな風に推奨される API を使ってソースを変更しました。
しかし、古いソースではスクロールしても描画したものが消えずに、ちゃんと表示され
たままになるのに、変更後のソースでは、ボタンはちゃんと配置される、即ち

addItemListern は正常に呼び出されているのに、 setActionCommand() と
addActionListener() の部分が何等かの原因で完了せず、その結果 actionPerformed()
の部分でイベントを受け取り損ねて全ての描画ができなくなってしまいます。しかし、
エラーも警告も出ないので全く手掛かりが掴めません。

何とか、解決方法を教えて下さい。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-12-14 22:03
コブラさん、こんにちは。

私はこの問題を解決に導く自信はありませんが、
今いったい何が起こっているのかを正確に把握し、
冷静に一歩一歩問題の原因を絞り込んでいけば、
きっと解決できると思いますよ。

まず、修正後のリンクが切れているのでなんとも言えませんが、
コブラさんの書かれた文だけを読むと何か説明がおかしい気がします。
『以前のソースでは、スクロールしたときに再描画できたが、
あたらしいソースではボタンを押しても正しい処理ができない。』
と読めてしまうのは私だけでしょうか?

> addItemListern は正常に呼び出されているのに、
正常に呼び出されているかどうか、どのように確認されましたか?

> setActionCommand() とaddActionListener() の部分が何等か
> の原因で完了せず、
完了せずと言うことは、呼び出されては居るのですよね。そしてそれが
途中で抜け出してしまったということですね? それの根拠は明確に
なってますか?

私の指摘は適切ではないかもしれませんが、もう一度状況を整理してみて
はいかがでしょうか?

なお、修正前のプログラムは何の参考書を元に作られたのかは分かりませ
んが、かなり怪しいです。(ここでそれを議論するつもりはないですが、
今回思いきって作り直したことは良いことだと言いたいだけですので
念の為。)

頑張ってください。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2003-12-15 03:14
これは失礼しました。
修正後のソースは

http://202.226.153.50/cobra/public_html/easy_draw3.java

こちらが正解です。

『以前のソースでは、スクロールしたときに再描画できたが、
あたらしいソースではボタンを押しても正しい処理ができない。』

これは、Kissinger さんのおっしゃる通りで、古いバージョンを新しいバージョン用に
書き換える前にはちゃんと描画されてました。それが、私がソースを修正する事によって、
ボタンとリストボックスのみが出現し、 描画ができなくなってしまいました。
つまり、新しい方に不具合があるのです。

addItemListener の確認は、そのアイテムが画面上に実装されてるかどうかで判断
しました。

ちょっと、 URL の typo で御見苦しい点がありました事は申し訳ありません。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-12-15 12:33
Mouse操作の対象はDrawAreaであるので、DrawAreaにMouseListenerとMouseMotionListenerをアタッチしてあげましょう。

Apple#update()はApplet#repaint()の結果呼ばれるメソッドなので、update()内でrepaint()呼んでも多分無駄です(無限にUPDATEイベントコールするのかな)。

Threadを正しく使っていないので、start(), stop()のオーバーライドは必要ないです。

なんだか、描画が変(Lineにおいては二点間線の描画だと思うが、複雑な模様を描画する)です。詳しく見ていないので、狙っているのかどうかは分からないですが...。

# AppletのRemote Debug方法取得しちゃった。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2003-12-16 11:16
おぉぉぉ!!
し、師匠!>かずくん

もう半ば諦め掛けていたのに、何か一つ見えざる壁が崩れた感じです。
やはり、オブジェクト指向。自分が振る舞う領域に ActionListner もアタッチするの
ですね。。

いや、凄く勉強になりました。
今後ともよろしくお願いします。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2003-12-20 15:29
師匠、できればサンプルのソースコードを nexous_6@yahoo.co.jp まで送って頂きたい
のですが・・・まだ分からない部分が多々ありますので。

謝礼は東京・麻布のうなぎ茶漬けでどうっすか?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-12-20 22:13
コブラさん、解決に近づいてよかったですね。

ところで、横道に反らすつもりはないのですが、
引用:
# AppletのRemote Debug方法取得しちゃった。


も面白そうですね。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2003-12-21 00:07
私も、その話是非聞きたいです。
自分の質問がくだらんので、もう積極的に横道に逸らしましょう(笑)

スキルアップ/キャリアアップ(JOB@IT)