4

*.png画像を表示するカスタムコンポーネントがあります。画像には透明な領域と不透明な領域があります。ActionListener(またはMouseClickListener)をコンポーネントに追加すると、コンポーネントの透明な領域をクリックしてもイベントが発生します。視覚的には、コンポーネントの外側をクリックしているように見えます。クリックに反応する領域と反応しない領域をどのように宣言できますか?

イベントオブジェクトからの座標の画像からピクセルを取得し、その透明度を確認する方法について読みました。それは難しく、効果がないようです。

たぶん、このコンポーネントまたは何か他のもののカスタムボーダーを定義しますか?

4

4 に答える 4

3

あなたはあなた自身の質問に答えました。

mousePressed()イベントハンドラー内で、JComponent内にいるかどうかを確認してから、マウスクリックのx座標とy座標のピクセルの透明度を確認する必要があります。

于 2012-01-18T14:53:20.760 に答える
2

クリックに反応する領域と反応しない領域をどのように宣言できますか?

これは、メソッドをオーバーライドすることにより、JComponentレベルで実行されますcontains(...)。たとえば、JLabelを拡張して、アイコンの形式で画像を含むTransparentLabelを作成します。

次に、このメソッドが呼び出されるたびに、この1つの場所をチェックするだけで、ピクセルが透明かどうかを判断できます。

于 2012-01-18T16:07:07.957 に答える
1

「オーバーヘッド」に関する主な問題が、マウスが画像の不透明な部分に入ったときにのみ不透明にしたい場合は、画像の「マスク」を事前に計算することを検討します。

画像の読み込み時に、バイナリ(つまり、白黒のみ、または配列内の1と0の値のみ)になる別の画像(または2D配列など)を作成します。0 /白=透明、1/黒=不透明。

次に、マウスイベントで、マスク内の正確なピクセルが設定されているかどうかを確認し(値=黒または1)、設定されている場合はトリガーします。

于 2014-12-21T05:40:13.020 に答える
0

2つの同じ画像ファイルを2つにまとめて、2番目の画像だけに短い幅を付けようとしましたか?そのように、両方の写真に異なるリスターナーを追加できると思います。

于 2012-01-18T14:51:35.503 に答える