2012-05-02 2 views
3

Когда я пытаюсь удалить компоненты из контейнера, я использую этот код.Удаление элементов в контейнере

private static void clear(){ 
    for (int i = con.getComponentCount() - 1; i >= 1; i--){ 
     con.remove(i); 
    } 
} 

Когда я вызываю эту функцию, функция действует, как если бы он не сделал ничего, но выходит из строя, как если бы ее перегрузкой. Это не дает никаких ошибок. Но когда я положил con.getComponent(i).setVisible(false); в код, он работает, но я хочу УДАЛИТЬ компоненты. Halp?

+1

Я предполагаю, что эта функция находится в классе и что con является переменной-членом этого класса? Можете ли вы включить строку, которая объявляет и создает эту переменную? Кроме того, когда он выходит из строя, нет ошибки? –

+0

@NathanielFord: это, вероятно, экземпляр 'java.awt.Container'. –

+1

Надеюсь, это не изменчивая статичность. (Вы многопоточность? И почему вы не хотите удалять компонент 0?) –

ответ

2

После того, как вы закончите удаление компонентов, которые вы хотите удалить, вызовите Container.validate(); Container.repaint(); На самом деле, возможно, вы захотите повторить проверку более того.

+0

Это помогло много! – KeirDavis

+0

Так решена проблема? Если это так, вы должны отметить лучшее решение как правильное. Это закроет проблему – ControlAltDel

3

Попробуйте использовать это:

while (con.getComponentCount()>0) { 
    con.remove(0); 
} 
+0

Мне нравится этот подход лучше, в общем. Однако, как это могло привести к срабатыванию IOOBE? –

+0

@pst: правый. не заметил, до того, как переменная 'i' уменьшалась в цикле. –

+0

Это потрясающе! Благодаря! – KeirDavis

1

Вы попробовали containerObject.repaint() после удаления компонентов?

0

Предполагая, что кон приведен AWT Container, вы можете позвонить

con.removeAll(); 

, который удаляет все содержащиеся в нем компоненты сразу.

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