JLayeredPanes中的透明JPanel

时间:2018-04-02 21:33:09

标签: java swing jpanel transparent jlayeredpane

我想让JPanel透明或完全不可见(不像panel.setVisible(false),但更像是opacity = 0.0f),然后将其放入JLayeredPane,以使底层可见。

你知道问为什么。我需要这个使用像BorderLayout这样的Layouts中的构建,因为我不想制作自己的布局等等。

我接下来尝试的是首先实现一个透明的JPanel,通过这样做或多或少容易:

public class ClearPanel extends JPanel {
    private static final long serialVersionUID = 706731555521208974L;

    private float opacity = 0.0f;
    private Shape shape = null;

    public ClearPanel() {
        setBackground(new Color(0,0,0,0));
        setOpaque(false);
    }

    public ClearPanel(float opacity) {
        setOpaque(false);
        setOpacity(opacity);
    }

    public ClearPanel(float opacity, Shape shape) {
        setOpaque(false);
        setOpacity(opacity);
        setShape(shape);
    }

// Here usually are some random getters and setters

     @Override
     public void paintComponent(Graphics go) {
        Graphics2D g = (Graphics2D) go;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        if(shape == null) shape = g.getClipBounds();
        g.setColor(new Color(getBackground().getRed(), getBackground().getGreen(), getBackground().getBlue(), 255*opacity));
        g.fill(shape);
    }

}

所以这通常会创建一个或多或少透明的JPanel版本。如果不使用布局但固定位置和大小,它也可以工作,但是当你编写更大的东西时,使用可用的解决方案会更容易。

问题来了: 当我尝试在JLayeredPane中使用它并且有可能看到底层时,没有任何反应,尽管我应该需要这个,因为我想要一个带有背景图像的底部面板然后我想要一些东西上面那个面板。我想,好吧,我知道Gimp的Layers,也许Java提供了这个,所以这就是为什么我认为JLayeredPane可以提供帮助。

你是否知道有可能让底层层穿过另一层,尽管你使用固定的布局或者你认为,我需要制作自己的布局或使用public void paint(Graphics g)的JFrame来逐步绘制它们一步?

提前致谢

PS:Sry我的英语,但经过一天的尝试和错误,我再也写不出任何“完美”...

0 个答案:

没有答案