2016-06-13 2 views
0

У меня есть три JPanel, fatherPanel, childPanel1, childrenPanel2.В чем разница между repaint и SwingUtilities.updateComponentTreeUI?

Когда я нажимаю кнопку, я удаляю текущую панель детей с панели отца и добавляю еще детей в панель «Отец».

Каждый раз, когда я должен вызывать revalidate() и repaint() для обновления пользовательского интерфейса.

Тогда я знаю, что SwingUtilities.updateComponentTreeUI() имеет тот же эффект.

Я хочу знать, есть ли разница между двумя?

ответ

2

Подвижные опоры подключаются Look-n-Feel. Когда вы меняете L & F во время выполнения, вам необходимо сообщить все ваши компоненты об этом изменении, используя метод updateComponentTreeUI. Поскольку из-за новых L & F размеры компонентов могут быть изменены, Swing должен вызывать revalidate для пересчета макета. Вот код метода updateComponentTreeUI

/** 
* A simple minded look and feel change: ask each node in the tree 
* to <code>updateUI()</code> -- that is, to initialize its UI property 
* with the current look and feel. 
*/ 
public static void updateComponentTreeUI(Component c) { 
    updateComponentTreeUI0(c); 
    c.invalidate(); 
    c.validate(); 
    c.repaint(); 
} 

Так что да, вы можете вызвать SwingUtilities.updateComponentTreeUI сообщить свой GUI об изменении макета, но это огромные накладные расходы (и теоретически может иметь некоторые побочные эффекты). Комбинация revalidate и repaint лучше в вашем случае.

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