1

私は大学のプロジェクトでマップエディタに取り組んでいます。また、マップパネルがキーイベントをリッスンしているはずなのにリッスンしていないという問題がありました。これは、JButton、ActionListenerを実装するJComboBox、およびマップパネル(JPanelを拡張する)などのJComponentを含むToolBarPane(JPanelを拡張する)をフレーム(BorderLayoutを使用)に追加すると発生します。Key Pressを受信したかどうかをテストするSystem.out.printlnステートメントがありますが、印刷されません。ToolBarを削除すると、キーリスナーが再び機能するため、keyListenerと同じようにmouseListennerが無効になります。プレスイベントなどを処理しますが、mouseListenerは正常に動作し、マウス移動イベントを処理できます。

これは、ToolBarPaneなしでどのように機能するかのスクリーンショットです。

http://img684.imageshack.us/img684/3232/sampleku.png

マウスを使用して画像を地図上に配置したり、レーザーツールのようにマウスを使用して画像を選択したりできます。数字キーを押すと、さまざまな画像を切り替えることができます。これは、次のようなToolBarPaneを追加するまで正常に機能します。このような:

img291.imageshack.us/img291/8020/failve.png(その前にhttpを追加してください。投稿できるハイパーリンクは1つだけです)

(私は新規ユーザーなので、ここに画像を投稿することはできません)

ToolBarPaneをオンにすると、キーイベントを処理できなくなりました。

どういうわけか、フォーカスがそのパネルに移されたのかもしれませんが、まったくわかりません。

と体はこれを知っていて、私を助けることができますか?

どうもありがとう

4

2 に答える 2

4

InputMapandWHEN_ANCESTOR_OF_FOCUSED_COMPONENTまたは同様のものを使用することをお勧めします。キーバインディングの使用方法からの抜粋:

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
コンポーネントには、フォーカスを持つコンポーネントが含まれています(または含まれています)。この入力マップは、一般的に複合コンポーネントに使用されます

それは私にとって非常に強力に機能しました。詳細と実際のコード例については、他の投稿をご覧ください。

Javaでのゲームのキーボード入力

またはこのチュートリアル:

Swing:入力/アクションマップを理解する

于 2010-05-08T05:24:33.520 に答える
0

KeyListenerを使用しないでください。

Swingは、はるかに柔軟なキーバインディングを使用するように設計されています。キーバインディングの簡単な要約を確認してください。これには、はるかに詳細なSwingチュートリアルへのリンクも含まれています。

(私は新規ユーザーなので、ここに画像を投稿することはできません)

とにかく画像はあまり役に立ちません。さらにヘルプが必要な場合は、問題を示しているSSCCEを投稿してください(上記の提案を試した後)。

于 2010-05-08T05:25:32.863 に答える