Вы можете переключиться на использование шаблона проектирования GUI . Или построить ограниченную реализацию.
Создание интерфейса формы с графическим интерфейсом, в котором есть метод DrawXArrayList (где X - какое-то значимое имя. Он имеет параметры типа ArrayList
Создайте новый класс с именем GUIView. У него есть как минимум два метода: UpdateXArrayList и RegisterForm
Когда вы инициализируете свое приложение, форма GUI зарегистрируется в классе, реализующем GUIView. Сделайте класс, реализующий GUIView видимым для формы.
Когда что-либо в вашей форме GUI обновляет массив, он вызывает UpdateXArrayList как последнее, что он делает. Затем метод UpdateXArrayList в классе, реализующем GUIView, будет вызывать DrawXArrayList, передавая обновленный массив. DrawXArrayList в классе формы, реализующем GUIFormInterface, затем предпримет шаги, необходимые для обновления элемента управления, отображающего ArrayList.
Хотя это кажется большим количеством шагов по сравнению с настройкой наблюдателя и слушателя. Вы имеете больше контроля над тем, как различные пользовательские действия влияют на пользовательский интерфейс, чем шаблон наблюдатель-слушатель. Кроме того, вы задокументировали в коде взаимодействие между действием пользователя и обновлениями пользовательского интерфейса.