0

2 つのレイヤーを持つ JLayeredPane があります。トップ レベルは完全に透明で、マウス イベントをキャプチャしてその下のペインにディスパッチするガラス ペインとして機能します。理由は不明ですが、一番下のレイヤーが正しく描画されません。ペイントイベントをそれにディスパッチする必要がありますか?

ちなみに、フレームのガラス板を使いたいのですが、手に入りません。Swing の上に構築された GUI フレームワークによって提供される JPanel の使用に行き詰まっています。SwingUtilities を使用して親フレームを取得しようとしましたが、常に null が返されます。

4

2 に答える 2

1

グラスペインを使用して Swing でイベントをキャプチャする場合は、JLayer (Java 7) を使用します。Java 7 を使用しない場合は、JXLayer ( http://java.net/projects/jxlayer/ ) を使用できます。これは、この動作の新しいスイング デフォルト コンポーネントです。見る

于 2012-09-17T09:49:09.263 に答える
0

非常に漠然とした質問であるというギヨーンの意見に同意します。ですから、あなたが今までのようにそれを行うには、非常に正当な理由があるかもしれません. ただし、それが役立つ場合は、透明なレイヤーを完全に破棄して、マウス リスナーを JLayeredPane に直接アタッチするだけで済みます。

JPanel jP = new JPanel();
JLayeredPane jLP = new JLayeredPane();
MouseAdapter mouse = new MouseAdapter();
jLP.addMouseListener(mouse);

次に、MouseAdapter クラス:

public class MouseAdapter{
  //Make sure you override the methods
}

もう 1 つの方法は、私が頻繁に使用する方法ですが、単純に JLayeredPane を拡張して MouseListener を実装することです。

public class MyLayers extends JLayeredPane implements MouseListener
{
  public MyLayers(){
    addMouseListener(this);
  }
//again make sure you override the methods
}

これにより、NetBeans で「コンストラクターでこれがリーク」がスローされますが、無視できます。

于 2012-09-17T09:13:36.833 に答える