2016-07-19 4 views
-2

Я хочу создать два контейнера JPanel, вложенных в другую панель, но почему он ничего не показывает в качестве кода ниже? Кажется, что мои две панели не на панели ABC?BorderLayout - JPanel in JPanel

public class ABC extends JPanel 
{ 

     Frame frame; 
     public ABC(Frame frame) 
     { 
      super(); 
      this.frame = frame; 
      setLayout(new BorderLayout()); 
      JPanel one = new JPanel(); 
      JPanel two = new JPanel(); 
      add(one,BorderLayout.NORTH); 
      add(two,BorderLayout.CENTER); 
      one.setVisible(true); 
      two.setVisible(true); 
     } 
     public class one extends JPanel { 
        public one() { 
         setLayout(new FlowLayout(FlowLayout.LEFT)); 
         createA(); 
         setVisible(true); 
        } 
       } 
     public class two extends JPanel { 
        public two() { 
         setLayout(new FlowLayout(FlowLayout.LEFT)); 
         createB(); 
         setVisible(true); 
        } 
       } 
    private void createA(){ 
       add(ButtonA); 
       add(ButtonAA); 
       add(ButtonAAA); 
       } 
    private void createB(){ 
        add(ButtonB); 
       } 
} 
+0

'JPanel two = new JPanel();'. Это просто пустая панель, она ничего не покажет. Измените цвет фона или добавьте к нему некоторые компоненты. –

+0

В 'JPanel one = new JPanel' вы не создаете экземпляры своих новых JPanels. Вы должны называть конструкторы 'one' и' two' – jr593

+0

1) Использовать логическую и согласованную форму отступающих кодовых строк и блоков. Отступы предназначены для того, чтобы поток кода стал проще следовать! 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 3) Не смешивайте компоненты Swing и AWT без уважительной причины. В этом случае нет веской причины. Измените «Frame frame» на 'JFrame frame;' и измените другие биты кода, как это было предупреждено компилятором. 4) В этом случае нет веских оснований для расширения «JPanel». .. –

ответ

0

Ur используя его в неправильном направлении, и должно использовать Youre собственные clases (один, два) не в JPanel:

JPanel one = new one(); 
JPanel two = new two(); 
add(one,BorderLayout.NORTH); 
add(two,BorderLayout.CENTER); 

Btw, попробуйте изменить название вашего clases может сбивать с толку , в один, два

0

попытки изменить prefererSize панели один, потому что, когда вы поставите панель в СЕВЕРЕ или в другом месте, но CENTER он должен иметь размер использовать границу, чтобы увидеть край панели

one.setBorder(BorderFactory.createLineBorder(Color.black)); 
two.setBorder(BorderFactory.createLineBorder(Color.blue)); 
one.setpreferredsize(new new dimension(width,height)); 
add(one,BorderLayout.NORTH);