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

Здесь показано создание модели SpinnerListModel.

Сначала вы создаете массив или список строк, а затем на его основе создаете модель данных.

Далее вы создаете компонент 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 автоматически создают этот объект модели, и вам не нужно явно с ним работать.

Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT