0

私はいくつかのJLabelを持っており、それぞれが次のようなImageIconを保持しています。

ImageIcon icon = new ImageIcon("path/to/image.jpg");
JLabel label = new JLabel(icon);

これらの画像は六角形の.PNGです。六角形の「外側」のエッジ(存在する冗長部分は長方形のキャンバスを使用しています)は透明です。画像をエルゴするJLabelは、この例のように順序付けられているため、常に3つの干渉画像があります。

他の下または上に「可視」レイヤーがないため、「クリック可能領域」を正確に可視レイヤーに定義したいと思います。そうするための最も賢い方法は何ですか、それとももっとエレガントな解決策がありますか?

4

1 に答える 1

3

この問題の解決策は 3 つあります。

  1. 六角形が単なる「黒い線」である場合は、 を実装paintComponentしてペイントできますPolygon。それらへの参照が必要です。後で - マウス クリックで、形状のコンポーネントとマウス ポイントを取得する必要があります。次に、それぞれを呼び出して形状を反復処理しcontainsます。このソリューションを使用すると、レイアウトのサポートが失われます。
  2. GlassPane/layer を実装し、マウス イベントを適切にディスパッチします- sJLabelを反復しますJLabel
  3. これは (密結合のため) 最も好ましくありません -JLabel隣接する六角形コンポーネントへの参照を拡張および追加します。マウス クリックが発生すると、このコンポーネントがこのイベントを「キャッチ」する必要があるかどうかを確認します。そうでない場合は、イベントを適切なコンポーネントに「転送」します。
于 2012-06-07T00:36:17.503 に答える