我有一个有两层的JLayeredPane。顶层是完全透明的,用作捕获鼠标事件的玻璃窗格,然后将它们分派到它下面的窗格。由于未知原因,底层无法正确绘制。我是否必须向其发送绘画事件?
顺便说一句,我会使用Frame的玻璃窗格,但我无法理解它。我坚持使用由Swing之上构建的GUI框架提供的JPanel。我尝试使用SwingUtilities来获取父框架,但它总是返回null。
答案 0 :(得分:1)
如果要使用glasspane并在Swing中捕获事件,请使用JLayer(Java 7)。如果您不使用Java 7,则可以使用JXLayer(http://java.net/projects/jxlayer/)。这是此行为的新swing默认组件。参见
答案 1 :(得分: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中引发“在构造函数中泄漏”,但它可以忽略不计。