2015-08-31 55 views
0

我无法让自定义面板显示使用JLayeredPanel。我目前正试图在第一层上创建一个黑色矩形,而在第二层上,我有一个自定义JPanel,它是一个图像幻灯片。幻灯片显示根本不会显示,只有在将其添加到框架时才能使用。有什么想法吗?JLayeredPane未显示我的自定义JPanel

代码:

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.util.ArrayList; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 

public class GUI extends JFrame { 

    private Container pane; 
    private JPanel emptySlideShow; 
    private JLayeredPane layeredPane; 

    public GUI(){ 
     this.setVisible(true); 
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     this.setBounds(0,0,screenSize.width, screenSize.height); 



     //  //Set up the content pane 
     //  pane = this.getContentPane(); //get the content pane to place components 
     //  pane.setLayout(null); //use absolute positioning (using Insets) 
     //  pane.setBackground(new Color(236, 236, 236)); //color the background 
     // 
     //  //Set up the main menu bar 
     this.emptySlideShow = new JPanel(); 
     this.emptySlideShow.setBounds(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),250); 
     this.emptySlideShow.setBackground(new Color(0,0,0));  

     layeredPane = new JLayeredPane(); 
     layeredPane.setLayout(null); 
     layeredPane.add(this.emptySlideShow,new Integer(0)); 

     ArrayList<Image> slides = new ArrayList<Image>(); 

     Image image1 = new ImageIcon("pictures/slide1.png").getImage(); 
     slides.add(image1); 

     Image image2 = new ImageIcon("pictures/slide2.png").getImage(); 
     slides.add(image2); 

     ArrayList<String> transitions = new ArrayList<String>(); 
     transitions.add("PanLR"); 
     transitions.add("FadeOut"); 


     this.add(new SlideShow(slides,transitions)); 
     layeredPane.add(new SlideShow(slides,transitions),new Integer(1)); 


     this.add(layeredPane); 



    } 
} 

回答

1

一种猜测,因为我们不知道所有有关代码的 - 但你将它添加到的JLayeredPane时需要指定一个组件的大小和位置,所以也许你”在添加之前不要设置SlideShow的大小(它的位置默认为0,0)。

虽然问题:为什么你想添加一个SlideShow JPanel到GUI 两次?一次到JLayeredPane,另一次到JFrame本身?

1

简单。要添加的组件(包括JLayeredPane的)的帧后调用

this.setVisible(true); 

移动这条线构造的末尾,你应该罚款或者,如果你真的想保持这条线在顶部,你应该调用revalidate()来更新JFrame和组件。