0

我有一个有两层的 JLayeredPane。顶层是完全透明的,作为一个玻璃窗格,它捕获鼠标事件,然后将它们分派到它下面的窗格中。由于未知原因,底层无法正确绘制。我是否必须向它发送绘画事件或其他什么?

顺便说一句,我会使用 Frame 的玻璃窗格,但我无法做到。我被困在使用建立在 Swing 之上的 GUI 框架提供的 JPanel 上。我尝试使用 SwingUtilities 来获取父框架,但它总是返回 null。

4

2 回答 2

1

如果您想使用玻璃窗格并在 Swing 中捕获事件,请使用 JLayer (Java 7)。如果您不使用 Java 7,您可以使用 JXLayer ( http://java.net/projects/jxlayer/ )。这是此行为的新 Swing 默认组件。看

于 2012-09-17T09:49:09.263 回答
0

我同意 Guillaune 的观点,这是一个非常模糊的问题。因此,您可能有充分的理由按照您的方式进行操作。但是,如果它有帮助,您可能可以完全处理透明层,只需将鼠标侦听器直接附加到 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
}

另一种方式,也是我经常使用的方式,是简单地扩展 JLayeredPane 并实现 MouseListener:

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

这会在 NetBeans 中引发“在构造函数中泄漏 this”,但它是可以忽略的。

于 2012-09-17T09:13:36.833 回答