Swing — изменение содержимого панели с помощью UpdateUI

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

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

Просматривая код, я где-то ожидал, что будет что-то, что вызывает метод setVisible() в зависимости от того, какая кнопка нажата.

Метод actionPerformed для каждой из кнопок быстрого доступа выглядит примерно так:

void shortCutBtn_actionPerformed(ActionEvent e) {
   propertyChangeListeners.firePropertyChange("selectedShortCut", previousShortCutSel, currentShortCutSel);
   mainPanel.updateUI();
  }

Я просмотрел большую часть кода и пришел к выводу, что приведенный выше код вызывает переключение кадров, но я не понимаю, как это происходит.

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

Я пытался найти документацию о том, как работает updateUI(), но я потерялся. Как приведенное выше приводит к обновлению содержимого правой панели JSplitPanel новым экраном?


person ziggy    schedule 14.10.2012    source источник
comment
Вы смотрели на слушателей propertychange, которые, кажется, присутствуют   -  person David Kroukamp    schedule 14.10.2012
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 14.10.2012
comment
Спасибо @DavidKroukamp - я не понимал, как работает PropertyChangeListener, но просто посмотрел, и это привело меня к другому классу, который имеет больше смысла. В этом классе есть метод propertyChange(), в котором есть все, что я искал. Если вы ответите как ответ, я приму - спасибо   -  person ziggy    schedule 14.10.2012
comment
@AndrewThompson Меня интересовали только те две строки кода, которые я опубликовал, поскольку это строки, с которыми я боролся. - Спасибо   -  person ziggy    schedule 14.10.2012
comment
Меня интересовали только эти две строки кода Плохо, я думал, что вас интересует ответ.   -  person Andrew Thompson    schedule 14.10.2012
comment
@DavidKroukamp: я согласен с Зигги.   -  person trashgod    schedule 14.10.2012
comment
@AndrewThompson, возможно, этих двух строк достаточно, чтобы найти хотя бы одну проблему в коде :-) И они, похоже, указывают на то, что предыдущий кодер оставил после себя ужасный беспорядок ... удачи, чтобы это исправить!   -  person kleopatra    schedule 15.10.2012
comment
@kleopatra возможно, этих двух строк достаточно, чтобы найти .. хотя бы одну проблему в коде :-) Если я прочитаю фрагменты кода, нам, возможно, не придется спорить .. ;)   -  person Andrew Thompson    schedule 15.10.2012


Ответы (2)


Согласно комментариям Зигги (рад, что это помогло)

Посмотрите на PropertyChangeListener, которые появляются в коде. В частности, в методе propertyChange(PropertyChangeEvent e) будет присутствовать код, который изменяет содержимое.

+1 Trashgod как всегда хороший пример/совет

person David Kroukamp    schedule 14.10.2012
comment
Я подозреваю, что mainPanel должен зарегистрироваться как PropertyChangeListener и вызвать repaint() в ответ. - person trashgod; 15.10.2012

Это неподходящее использование updateUI(), которое «сбрасывает свойство пользовательского интерфейса на значение из текущего внешнего вида». Поскольку сам пример может быть ненадежным, рассмотрите возможность изучения другого. GoogleOlympiad, например, устанавливает значок ярлыка с использованием (кэшированного) изображения.

ImageIcon image = getImage(index);
imageLabel.setIcon(image);

image
(источник: drjohnbmatthews на сайте sites.google.com)

person trashgod    schedule 14.10.2012