JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());

loginPanel = new LoginPanel(this);
loginPanel.setOpaque(false);

flashPlayer=new FlashPlayer();
flashPlayer.setFlashfolder("src/flash");
flashPlayer.setFileName("afternoon.swf");
flashPlayer.play();

jp.add(flashPlayer.flashPanel);
this.getLayeredPane().add(jp); this.add(loginPanel);
上面是源码的一段,this是JFrame按理说如果JPanel设置透明成功的话,应该能显示jp的动画效果啊,怎么一直是覆盖呢?求解

解决方案 »

  1.   

    改成
    loginPanel.setOpaque(false);
    看看是否显示jp的动画效果,如果不显示,那就是你的jp有问题。
      

  2.   

    我一直都是写loginPanel.setOpaque(false);难道是JP的问题?
      

  3.   

    this.add(loginPanel);改成setContentPane(loginPanel) 试试。原本的 contentPane 是 opaque
      

  4.   

    还是一样的啊,会覆盖在上面问题出在 size, JRootPane 的专用 LayoutManager 对几个特殊的层面 glassPane, contentPane 等有适应当前 size 的处理,而 JLayeredPane 默认不带 LayoutManager,所以你加进去的 jp size 为 0
      

  5.   

    简单定义下面这个LayoutManager:
    class MyLayout implements LayoutManager {  @Override
      public void addLayoutComponent(String name, Component comp) {
      }  @Override
      public void removeLayoutComponent(Component comp) {
      }  @Override
      public Dimension preferredLayoutSize(Container parent) {
        
        Dimension result = new Dimension(0, 0);
        for(Component c : parent.getComponents()) {
          
          Dimension d = c.getPreferredSize();
          result.width = Math.max(d.width, result.width);
          result.height = Math.max(d.height, result.height);
        }
        return result;
      }  @Override
      public Dimension minimumLayoutSize(Container parent) {
        
        return preferredLayoutSize(parent);
      }  @Override
      public void layoutContainer(Container parent) {
        
        Rectangle bounds = new Rectangle(0, 0, parent.getWidth(), parent.getHeight());
        Insets i = parent.getInsets();
        
        bounds.x += i.left;
        bounds.y += i.top;
        bounds.width -= i.left + i.right;
        bounds.height -= i.top + i.bottom;
        
        for(Component c : parent.getComponents())
          c.setBounds(bounds);
      }
    }然后 getLayeredPane().add(jp); 改成:getLayeredPane().setLayout(new MyLayout());
    getLayeredPane().add(jp);
    getLayeredPane().setLayer(jp, getLayeredPane().getLayer(getContentPane()) - 1);
    试一下
      

  6.   

    还是一样的啊,会覆盖在上面问题出在 size, JRootPane 的专用 LayoutManager 对几个特殊的层面 glassPane, contentPane 等有适应当前 size 的处理,而 JLayeredPane 默认不带 LayoutManager,所以你加进去的 jp size 为 0
    但是当我把size调过来以后jp就把loginPane给覆盖了,这是怎么回事?我jp上放的是FlashPane