我希望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我的英语,但经过一天的尝试和错误,我不能写任何“完美”的东西了...