带透明层的JLayeredPane导致绘图不正确

时间:2012-09-10 16:28:31

标签: java swing alpha-transparency jlayeredpane glasspane

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

顺便说一句,我会使用Frame的玻璃窗格,但我无法理解它。我坚持使用由Swing之上构建的GUI框架提供的JPanel。我尝试使用SwingUtilities来获取父框架,但它总是返回null。

2 个答案:

答案 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中引发“在构造函数中泄漏”,但它可以忽略不计。