Тимур Машнин

Графические интерфейсы пользователя Java


Скачать книгу

выбранное поле, и оно будет сохранено в списке.

      Редактирование выбранного элемента списка не приводит к изменению этого элемента в списке, а влияет только на объект, возвращаемый методом getSelectedItem.

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

      Здесь нужно учитывать, что слушатель ActionListener получает событие ActionEvent, когда был сделан выбор.

      И если поле со списком доступно для редактирования, тогда событие ActionEvent также будет сгенерировано, когда закончится редактирование.

      Таким образом, обработчик ActionListener вызывается два раза.

      Поэтому сначала мы запоминаем индекс выбранного элемента, а затем при получении команды редактирования, сохраняем новое значение по указанному индексу.

      Для изображения элементов списка используется объект, реализующий интерфейс ListCellRenderer.

      Этот объект последовательно выводит элементы, переходя от одного элемента к другому.

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

      Метод getListCellRendererComponent интерфейса ListCellRenderer отвечает за формирование компонента и размещения в нем текущего элемента списка value, имеющего порядковый номер index.

      Полученный таким образом компонент затем выводится на экран своим методом paint.

      В библиотеке Swing интерфейс ListCellRenderer реализован классами BasicComboBoxRenderer и DefaultListCellRenderer, расширяющими класс JLabel.

      Именно потому, что выводом элементов фактически занимается класс JLabel, можно использовать в элементах списка текст или изображение.

      Здесь показана пользовательская реализация интерфейса ListCellRenderer, которая выводит флажки в качестве элементов списка.

      JScrollPane

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

      Когда размер экрана ограничен, используется панель прокрутки для отображения большого компонента или компонента, размер которого может изменяться динамически.

      Полосы прокрутки могут всегда отображаться на экране, отображаться при необходимости или не отображаться вообще. Это определяется методами setVerticalScrollBarPolicy и setHorizontalScrollBarPolicy.

      На самом деле кроме своего содержимого и двух полос прокрутки эта панель может содержать еще шесть компонентов: заголовок, столбец слева, и четыре компонента по углам.

      Эти компоненты устанавливаются методами setColumnHeaderView, setRowHeaderView и setCorner соответственно.

      Компонент помещается на панель прокрутки сразу же при ее создании конструктором класса JScrollPane или позднее методом setViewportView.

      На самом деле компонент отображается в панели прокрутки в окне содержимого JViewport, которое содержит панель JScrollPane.

      Это окно можно получить методом getViewport класса JScrollPane, а затем можно добавить в него компонент обычным методом add.

      JList

      Компонент JList отображает список объектов и позволяет пользователю выбрать один или несколько элементов в списке.