0

JFrame 全体を満たす単純なインターフェースを作成しました。ここでは、インターネットで発見されたクラス FinalGlassPane のバージョンを使用しています。

このガラス ペインには通常のイベント リスナーはありませんが、基礎となるコンポーネントの AWTEvents を監視します。このようにして、インターフェースの機能がすべて利用できるようになり、単一の AWTEvent ハンドラーを使用してグローバルなマウスの動きの座標に応答し、それに応じてすべての上にペイントすることができます。すべてがうまく機能しますが、メインの JFrame 内に、それぞれ独自の座標空間とイベント ハンドラーを持つ、この機能の複製が必要です。JLayeredPane について学んだばかりですが、この機能が JLayeredPane で可能になることを確認したかったのです。IE は、完全に透明であるがペイント可能な JPanel レイヤーを一番上に追加し、それで AWTEvents を処理し、基になるイベントを正常に起動します。

編集: JDesktopPane 内で複数の JInternalFrame (および関連するガラス ペイン) を使用することについて読んでいます。JDesktopPane がレイアウト マネージャーで動作するとは思わないため、必要に応じて 2 つのフレームを絶対に配置/サイズ変更する必要がありますが、これが最適なオプションである可能性があります。編集終了

最後にやりたいことは、すべてのインターフェイス コンポーネントにマウス移動リスナーを追加し、同じメソッドを実行するために親パネルの座標に変換する必要があることです。

必要に応じて、グラス ペイン全体のマウス座標を監視し続け、そこからロジックを分岐する方法を見つけ出すことができました。ただし、自己完結型で個別化されている方がよいでしょう。

最後の注意点として、最終的にはこれを Android に導入したいと考えていますが、Android のグラフィックスについては何も知りません。階層化されたパネル機能がない場合は、最初から 1 回だけ、より難しく、より移植性の高い方法で実装したいと思います。

4

1 に答える 1

3

これは、Java 7を使用している場合は、 JXLayerまたはJLayerを使用して実現できます。一般に、JXLayer/JLayerの機能はGlassPaneよりも優れています。

Swing / AWTベースのソリューションはAndroidでは機能しません。そこでは、Android固有のコンポーネントを使用する必要があります。

于 2012-07-13T04:16:28.073 に答える