2014-09-15 5 views
1

Когда я устанавливаю видимость компонентов (в основном JPanels, у которых есть другие дочерние компоненты), значение false или обратно к true позже, мне нужно вызвать явно .revalidate() и .repaint() в родительском контейнере или выполнить LayoutManager обрабатывает это автоматически?Swing: динамически меняет видимость компонентов

Когда я попробовал это с компонентом в BorderLayout-North, например, все выглядело отлично, не вызвав revalidate. Просто не уверен, что он будет работать на всех платформах и со всеми LayoutManagers.

+1

он будет работать со всеми стандартными Льим tmanagers – CodeFanatic

ответ

1

, когда вы устанавливаете видимость компонентов, таких как JPanels. JVM автоматически вызывает метод revalidate() и repaint(), когда u устанавливает видимость в true. u не нужно вызывать все эти методы. и она будет работать для всех макете

1

Следующий код может решить вашу проблему

 p2_wrkrreg=new JPanel(); 
     p2_wrkrreg.setBounds(201,0,830,720); 
    // p2_wrkrreg.setLayout(null); 
     //p2_wrkrreg.setBackground(Color.white); 
     p2_wrkrreg.setVisible(false); 

В этом коде

JPanel объявил и сделать его невидимым, он будет виден на кнопку мыши

@Override 
public void actionPerformed(ActionEvent e) {  

if(e.getSource()==btn_wrkrreg) 
    { 
     p2_wrkrreg.setVisible(true); 
    } 

здесь btn_wrkrreg является JButton