Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин Страница 19
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин читать онлайн бесплатно
Далее вы создаете компонент JSpinner на основе модели данных.
К компоненту присоединяется слушатель изменения значения поля, в обработчике которого вы можете получить новое значение форматированного поля ввода и работать с ним.
Компонент JSpinner напрямую поддерживает один тип прослушивателя событий – это ChangeListener.
Этот слушатель уведомляется, когда вызывается метод commitEdit, сообщая, что значение счетчика изменилось.
По умолчанию, этот метод вызывается при нажатии стрелок для перемещения по различным значениям.
Предположим, вы хотите позволить пользователю ввести свое значение и хотите получить это значение для дальнейшей обработки.
Для этого вам нужно обратиться к вспомогательному классу компонента JSpinner.
Для каждой из моделей данных компонента JSpinner, доступен вспомогательный класс ListEditor, DateEditor, NumberEditor, которые расширяют базовый класс DefaultEditor.
В то время как модель данных позволяет контролировать то, что выбирается для компонента, редакторы позволяют контролировать то, как отображать и редактировать каждое выбираемое значение.
Поэтому вы извлекаете из спиннера редактор, а из редактора извлекаете объект поля ввода.
Затем присоединяете к полю ввода слушатель изменения его свойства, в обработчике которого вы можете получить введенное пользователем значение после нажатия им клавиши Enter или потери полем ввода фокуса.
Также вы можете использовать редактор спинера и соответственно поле ввода для контроля над отображением значений спиннера.
Здесь мы выравниваем значение по центру поля ввода.
Если вы хотите отображать в спиннере даты, вам нужно использовать модель данных SpinnerDateModel.
Здесь в конструкторе модели мы указываем текущее значение, начальное и конечное значения последовательности дат, ограничивая диапазон 100 годами.
Последним аргументом конструктора вы указываете шаг изменения даты.
Соответственно, в слушателе изменения свойства поля ввода, вы должны проверять, является ли вводимое значение объектом класса Date.
Если вы хотите изменить формат отображения даты, вам нужно создать экземпляр редактора, указав в конструкторе шаблон форматирования.
Затем вы должны установить этот редактор для спиннера методом setEditor.
Модель данных SpinnerNumberModel обеспечивает выбор номера из открытого или закрытого диапазона значений.
Это число может быть любым из подклассов класса Number, включая объекты Integer и Double.
Здесь в конструкторе модели мы также указываем текущее значение, начальное и конечное значения последовательности чисел, указывая шаг изменения значения.
В слушателе изменения свойства поля ввода, вы должны проверять, является ли вводимое значение объектом класса Number.
Если вы хотите изменить формат отображения чисел, вам нужно создать экземпляр редактора, указав в конструкторе шаблон форматирования.
Затем вы должны установить этот редактор для спиннера методом setEditor.
Компонент JSlider представляет собой ползунок, с помощью которого пользователь может выбрать целое значение в указанном диапазоне.
Компонент JSlider создается с помощью конструктора, в котором можно указать его ориентацию, минимальное и максимальное значения диапазона и первоначальное значение ползунка.
Рядом с линейкой ползунка можно разметить шкалу со штрихами, отстоящими друг от друга на расстояние, устанавливаемое методом setMajorTickSpacing.
После определения расстояния шкала отображается методом setPaintTicks (true).
К штрихам можно добавить отображение числовых значений методом setPaintLabels (true).
Между штрихами можно отобразить более мелкие штрихи методом setMinorTickSpacing.
Если применить метод setSnapToTicks (true), то ползунок будет останавливаться только против штрихов.
Основную линейку ползунка можно убрать методом setPaintTrack (false), оставив только шкалу со штрихами.
По умолчанию числовые значения в шкале ставятся против каждого штриха.
Методом createStandardLabels можно изменить это правило, задав другой шаг расстановки чисел на шкале и другой начальный отсчет.
Затем эту таблицу нужно установить на шкале методом setLabelTable.
Можно создать свою таблицу меток штрихов, с помощью хэш-таблицы Hashtable, поместив в нее против каждого значения штриха свою метку.
После этого эта таблица устанавливается методом setLabelTable для ползунка.
В этом примере мы создаем ползунок и с помощью него динамически изменяем размеры кнопки.
JTree
Класс JTree представляет компонент Swing для отображения древовидных данных.
Дерево содержит один корневой объект root, далее размещаются его потомки узловые объекты node, имеющие своих потомков и одного предка parent.
На самом нижнем уровне расположены листья leaf – узлы, не имеющие потомков.
Как и все Swing компоненты, компонент JTree использует отдельный объект модели для хранения и представления данных, которые он отображает.
Большинство компонентов Swing автоматически создают этот объект модели, и вам не нужно явно с ним работать.
Однако компонент JTree отображает данные, которые намного сложнее, чем данные типичного компонента Swing.
Когда вы работаете с JTree, вы должны явно использовать объект модели.
Объект JTree создается с помощью конструктора, который может быть пустым, и тогда вам нужно установить модель данных методом setModel.
Следующие три конструктора создают дерево без объекта корневого узла.
Полноценное дерево вы можете создать, передав в конструктор модель данных, реализующую интерфейс TreeModel.
Существует класс DefaultTreeModel, реализующий этот интерфейс.
Объект этого класса создается на основе корневого узла, который содержит все остальные узлы.
Поэтому для дерева JTree предусмотрен конструктор, который создает дерево сразу на основе корневого узла.
Корневой узел – это объект, реализующий интерфейс TreeNode.
Существует класс DefaultMutableTreeNode, реализующий этот интерфейс.
Поэтому самый простой способ построения дерева, это создать корневой узел DefaultMutableTreeNode, затем добавить к нему дочерние узлы, а затем добавить дочерние узлы к каждому из них по мере необходимости.
Как правило, дерево помещается в панель с прокруткой, чтобы развернутое дерево поместилось во фрейм.
При этом указывается число строк, помещающихся в панели, с помощью метода setVisibleRowCount.
Здесь мы создали дерево строк.
Однако можно создать дерево произвольных объектов.
Одно условие – объект должен иметь метод toString, возвращающий строку, которая и будет отображаться на экране в дереве.
По умолчанию, узлы дерева имеют режим множественного выбора, то есть их можно выбирать с нажатой клавишей Ctrl.
Для того чтобы ограничить выбор одним узлом, нужно получить модель выбора дерева и установить для этой модели режим выбора одного узла.
К дереву можно присоединить слушателя выбора узла, в обработчике которого можно получить объект выбранного узла с помощью метода getLastSelectedPathComponent.
И дальше уже с этим объектом работать.
Вы также можете редактировать текст в каждом узле, вызвав метод setEditable (true) для дерева.
В этом случае после редактирования узла, дерево будет отображать новую строку и в обработчике слушателя TreeSelectionListener, метод getLastSelectedPathComponent будет возвращать уже измененный узел.
Так как при редактировании мы изменяем модель данных дерева, отследить редактирование узла мы можем с помощью слушателя изменений модели данных дерева.
В обработчике событий treeNodesChanged этого слушателя, мы с помощью метода getTreePath получаем родителя измененных узлов.
И если это не корневой узел, берем первый дочерний узел, который мы
Жалоба
Напишите нам, и мы в срочном порядке примем меры.