2015-08-31 75 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和組件。