- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java gui のイベント処理が重い)
Java GUIのイベント処理が重い
このQ&Aのポイント
- Javaのマウスイベントやキーイベントを同時に実行すると重くなる問題が発生しています。
- ボタンを選択してブロックを表示し、マウスの位置に合わせてボード上に移動させる処理はできましたが、上左右キーを押すと重くなってしまいます。
- また、ボード上にカーソルを移動するとStackOverflowErrorが発生してしまいます。解決方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>javaのマウスイベントやキーイベントを同時にやろうとすると... >2.そのActionEventの中でMouseListenerを使ってMouseEnteredとMouseExitedを実行して、カーソルの位置の移動に合わせて、ボード上に選んだブロックを表示して >StackOverflowError 上記から判断してイベント処理について勘違いをされている気がします。ActionListener等のハンドラー内からMouseEventなどのイベントを自分で発行したり再描画のためにpaintメソッドやpaintComponentメソッドを直接呼び出したりしていないでしょうか? もしそうだとしたらそのような処理方法は間違いです。 何かのイベントが発生した際は表示対象(例えばブロック)の状態(表示そのものではなく表示を決める元の情報)変更して表示用コンポーネントのrepaint()メソッドを呼び出したら即座にreturnします。表示用コンポーネントでは単純にpaintComponentメソッドで表示対象の現在の状態を画面へ表示(再描画)するだけです。 具体的にはアニメーションの例が載っているページが色々あると思うのでそれらを参考にしつつもう少し簡単なものから取り組まれるとよいと思います。
補足
回答ありがとうございます。 仰る通り、だいぶ無知なためか、勘違いしている所が多々あるかもしれません。 実際、 ○○Listenerに対応した操作があると、event(MousueListenerだった場合、MouseExitedなど)の関数が実行される。 しか大雑把に理解しておりませんでした。 その知識だけであとは好き勝手記述していたので、いまでは訳が分からなくなってしまいました笑。 この状況で正しい回答をいただいても、それすらちゃんと理解できないかもしれませんね。。。 もっと詳しく勉強しなおします! ありがとうございました。