Кодовое название одна форма обновления - PullRequest
1 голос
/ 07 марта 2019

В моем приложении я хочу перезагрузить форму.Проблема в том, что каждый раз, когда я перезагружаю форму, существующие элементы сохраняются на экране, а новые добавляются впоследствии.

Есть, например, две кнопки: buttonOne и buttonTwo.Оба внутри контейнера.Контейнер добавляется в форму.

Когда я перезагружаю форму, buttonOne и buttonTwo снова добавляются к уже существующим двум кнопкам.Когда я снова перезагружаюсь, кнопки Один и Два четыре раза на экране.

Я пытался:

form.removeAll();
containerButton.removeAll();
containerButton.remove();
form.repaint();
form.refreshTheme();

// reload the form 

channels (); 

// the class

public Form form = new Form(new BoxLayout(2));

public void channels() { 

   container.add (buttonOne).add(buttonTwo);
   form.add (containerButton);

}

Этот подход не решает проблему.Что мне не хватает?

Заранее спасибо за любой ответ.

1 Ответ

1 голос
/ 08 марта 2019

Удаление всех приведет к удалению компонентов из Container (в данном случае панели содержимого формы), но не удалит их через иерархию.

Оба:

form.repaint();
form.refreshTheme();

Неправильные API для использования при изменении иерархии. Вам нужно использовать revalidate() или animateLayout().

«Перезагрузка» - это не та концепция, которая существует в Codename One, поскольку виджеты не знают о ваших данных. Обычный трюк с защитой от дурака - воссоздать форму с нуля и показать ее.

...