2017-02-14 8 views
0
class ABC extends JFrame { 
    public JPanel createGUI() 
    { 
     JPanel outerPanel = new JPanel(); 
     outerPanel.setLayout(null); 

     JLabel top = new JLabel(); 
     top.setBounds(40,40,400,30); 
     top.setText("Hello World"); 
     outerPanel.add(top); 

     int l = getLength(); 
     JPanel innerPanel = new JPanel(); 
     if(l==0) 
     { 
      innerPanel.setLayout(null); 
      JLabel empty = new JLabel("No Data Found"); 
      empty.setBounds(80,150,300,30); 
      innerPanel.add(empty); 
     } 
     else 
     { 
      innerPanel.setLayout(new GridLayout(l,4,5,5)); 
      for(int i=0;i<l;i++) 
      { 
       innerPanel.add(new JLabel("Text1"); 
       innerPanel.add(new JLabel("Text2"); 

       JButton b1 = new JButton("Button1"); 
       innerPanel.add(b1); 
       JButton b2 = new JButton("Button2"); 
       innerPanel.add(b2); 
      }   
     } 
     outerPanel.add(innerPanel); 
     return outerPanel; 
    } 
} 

В приведенном выше коде innerPanel не отображается, и ни какая-либо ошибка occurs.Any идея, как не показать вверх innerPanel, который находится внутри outerPanel.I попытался с помощью getContentPane () .add (innerPanel) но это не сработало.JPanel не появляется в другой JPanel

+0

Я думаю, проблема заключается в том, что у innerPanel будет getPreferredSize() == 0,0 ... потому что в нем ничего нет, поэтому FlowLayout (диспетчер компоновки по умолчанию JPanel) не выполняется, если он добавляется непосредственно в contentPane, вероятно, будет отображаться внешняя панель, потому что вызов add (component) на контентной панели по умолчанию добавит ее с BorderLayout.CENTER – ControlAltDel

+0

. Как вы даже знаете, что отображается, а что нет. Вы не добавили визуальных элементов, которые занимают пространство. Ваш ярлык пуст и никаких границ не задано, поэтому все элементы будут иметь нулевой размер. – markbernard

+0

@markbernard Здесь я добавил только что добавленный минимальный требуемый код. Я думал, что даст решение. У меня есть визуальные элементы, созданные в outerPanel, а также innerPanel, в которых внешняя панель выполняет визуализацию должным образом. – srk20

ответ

1

Try изменения

outerPanel.setLayout(null); 

в

outerPanel.setLayout(new FlowLayout()); 

или удалить вызов setLayout полностью.

+0

Хотя хорошая идея, насколько я могу судить, ОП не знает, действительно ли панель видима, поскольку ничего не было добавлено к ней, поэтому, даже если это «решило» проблему, они не будут знаю – MadProgrammer

+1

(1+), но вы можете просто избавиться от оператора setLayout (null). Swing был разработан для использования с менеджерами компоновки, а менеджер компоновки по умолчанию для JPanel - FlowLayout. – camickr

+0

Хорошая точка, отредактирована. –

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