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的动画效果啊,怎么一直是覆盖呢?求解
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的动画效果啊,怎么一直是覆盖呢?求解
loginPanel.setOpaque(false);
看看是否显示jp的动画效果,如果不显示,那就是你的jp有问题。
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);
试一下
但是当我把size调过来以后jp就把loginPane给覆盖了,这是怎么回事?我jp上放的是FlashPane