2015-08-31 10 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).

Вопрос: почему вы пытаетесь добавить слайд-шоу JPanel в GUI дважды? Однажды на JLayeredPane, а другой на JFrame?

1

Простой. Вы добавляете компоненты (в том числе JLayeredPane) к раме ПОСЛЕ вызова

this.setVisible(true); 

Переместить эту строку в конце конструктора, и вы должны быть хорошо или, если вы действительно хотите сохранить эту линию в верхней части, вам должен вызвать revalidate() для обновления JFrame и компонентов.

Смежные вопросы