Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция
Скачать 25.04 Mb.
|
msg = " Mac OS: " + m a c .getState(); g .drawString(msg, 6, Окно функционирующего аплета показано на рис. Класс Допускается создание набора взаимоисключающих флажков, в котором водно и тоже время может быть установлен один (и только один) флажок. Эти флажки часто называются переключателями, потому что подобны переключателю каналов в ав Глава 25. Использование элементов управления, диспетчеров компоновки. 791 томобильном радиоприемнике — водно и тоже время можно выбрать только одну радиостанцию. Чтобы создать набор взаимоисключающих кнопок, следует вначале определить группу, к которой они принадлежат, а затем указать эту группу при создании флажков. Группы флажков представляют собой объекты класса C h eck box G ro up . Определен только конструктор по умолчанию, создающий пустую группу p p le t V ie w e r: Chec..'.4, - Г Windows XP R jWinddws 7' Г Solaris Г Mac OS Current state’ Windows XP- false Windows 7. true Solaris: false Mac OS. false Applet Рис. 25.3. Окно аплета Чтобы узнать, какой флажок в группе установлен на данный момент, вызовите метод g e t S e l e c t e d C h e c k B o x ( ) . Установить флажок можно с помощью метода s e t S e l e c t e d C h e c k b o x ( ) . Эти методы показаны далее getSelectedCheckbox() void setSelectedCheckbox(Checkbox которая) Здесь параметр которая представляет флажок, который вы хотите установить. Флажок, установленный ранее, будет сброшен. Ниже показан пример программы, в которой используются флажки, являющиеся частью группы / Демонстрация применения группы флажков j a v a .a w t .*; import java.a w t .event.*; import java.applet.*; / * */ public class CBGroup extends Applet implements ItemListener { String msg = ""; Checkbox winXP, w i n 7 , solaris, mac; CheckboxGroup cbg; public void init() { cbg = new CheckboxGroup(); winXP = new Checkbox("Windows X P " , cbg, true); win7 = new Checkbox("Windows 7", cbg, false); 7 9 2 Часть II. Библиотека Java solaris = new Checkbox("Solaris", cbg, false); mac = new Checkbox("Mac OS", cbg, false); add(winXP); add(win7); add(solaris); add(mac); winXP.addltemListener(this); w i n 7 .addltemListener(this); solaris.addltemListener(this); m a c .addltemListener(this); public void itemStateChanged(ItemEvent ie) { repaint(); } // Отображение текущего состояния флажков public void paint(Graphics g) { msg = "Current selection: "; // msg = "Текущий выбор "; msg + = c b g .getSelectedCheckbox().getLabe g .drawString(msg, 6, Окно аплета CBGroup вовремя выполнения показано на рис. 25.4. Обратите внимание на то, что в данном случае флажки имеют форму окружности. Applet С W in d o w s ХР <* Щ по С S o laris С Mac OS C u rre n t selection: W in d o w s 7 A pplet Рис. 25.4. Окно аплета Элементы управления выбором Класс C h o ic e используется для создания всплывающего списка элементов, в котором пользователь может делать свой выбор. Поэтому элемент управления C h o ic e Глава 25. Использование элементов управления, диспетчеров компоновки. 7 9 является разновидностью меню. Будучи неактивным, компонент C h o ic e занимает ровно столько пространства, сколько необходимо для отображения выбранного на данный момент элемента. Когда пользователь щелкает на нем, раскрывается весь список, в котором можно выбрать новый элемент. Каждый элемент в списке представляет собой строку, которая появляется в виде метки с выравниванием влево в том порядке, в каком он добавляется в объект класса C h o ic e . Класс C h o ic e определяет только стандартный конструктор, который создает пустой список. Чтобы добавить элемент выбора в список, нужно вызвать метод ad d (). Он имеет следующую общую форму, void add(String имя) Здесь параметр имя представляет добавляемый элемент. Добавление элементов в список производится в том порядке, в каком выполняются вызовы метода ad d (Чтобы узнать, какой элемент выбран на данный момент, можно вызвать один из двух методов g e t S e l e c t e d l t e m () или g e t S e l e c t e d l n d e x (). String getSelectedltem() int Метод g e t S e l e c t e d l t e m () возвращает строку, содержащую имя элемента, а метод g e t S e l e c t e d l n d e x () — индекс элемента. Первый элемент имеет индекс 0. По умолчанию выбран первый элемент, добавленный в список. Чтобы узнать, сколько элементов содержится в списке, нужно вызвать метод g e t l t e m C o u n t (). Чтобы указать элемент, выбранный на данный момент, можно передать методу s e l e c t () начинающийся с нуля целочисленный индекс или строку, совпадающую с именем элемента в списке. Эти методы показаны ниже getltemCount() void select(int индекс) void select(String имя) Для заданного индекса можно получить имя, связанное с элементом в этом индексе, если вызвать метод g e t I t e m (), который имеет следующую общую форму getltem(int индекс) Здесь параметр индекс представляет индекс требуемого элемента. Обработка списков выбора Каждый раз при выборе определенного элемента происходит событие. Извещение о нем передается всем слушателям, которые предварительно зарегистрировались на получение извещений о событиях элемента отданного компонента. Каждый слушатель реализует интерфейс I t e m L i s t e n e r . Этот интерфейс определяет метод i t e m S t a t e C h a n g e d (). В качестве параметра для этого метода применяется объект класса I t e m E v e n t Ниже показан пример создания двух меню класса C h o ic e . Водном из них производится выбор операционной системы, в другом — браузера. // Демонстрация применения списков выбора import java.awt.*; import j a v a .a w t .event.*; import java.applet.*; /* */ public class ChoiceDemo extends Applet implements ItemListener { Choice os, browser; 7 9 Часть II. Библиотека Java String msg = ""; public void init() { os = new Choice(); browser = new Choice(); // добавление элементов в список os o s .a d d ("Windows XP"); o s .a d d ("Windows 7"); o s .a d d ("Solaris"); o s .a d d ("Mac O S ") ; // добавление элементов в список browser browser.a d d ("Internet Explorer"); browser.a d d ("Firefox"); browser.a d d ("Opera") ; // добавление списков выбора в окно ; // регистрация на получение уведомлений о событиях o s .addltemListener(this); browser.addltemListener(this); } public void itemStateChanged(ItemEvent ie) { repaint(); } // Отображение текущего выбора public void paint(Graphics g) { msg = "Current OS: // msg = "Текущая ОС += o s .getSelectedltem(); g .drawString(msg, 6, 120); msg = "Current Browser: "; // msg = "Текущий браузер: "; msg += browser.getSelectedltem(); g в Окно аплета вовремя выполнения показано на рис. Использование списков Класс L i s t предлагает компактный прокручиваемый список, в котором можно выбирать множество элементов. В отличие от объекта класса C h o ic e , который отображает только один выбранный элемент меню, объект класса L i s t можно создать таким образом, чтобы он показывал любое количество элементов выбора в видимом окне. Его можно создать так, чтобы он позволил выбрать несколько элементов. Класс L i s t предлагает следующие конструкторы О throws HeadlessException List(int колСтрок ) throws HeadlessException List(int колСтрок, boolean выборНескольких) throws HeadlessException Глава 25. Использование элементов управления, диспетчеров компоновки. 7 9 5 Applet [Windows XP Ч | Firefox 3 [internet Explorer ] [Opera Current OS' Windows XP Current Browser. Firefox Applet Рис. 25.5. Окно аплета Первый вариант создает элемент управления класса L i s t , который позволяет выбрать водно и тоже время только один элемент. Во втором варианте значение параметра колСт рок определяет количество пунктов в списке, которые всегда будут видимы (остальные пункты можно просмотреть, используя прокрутку. В третьем варианте, если параметр выбор Нескольких содержит значение t r u e , пользователь может выбрать одновременно два или более пунктов. Если же он содержит значение f a l s e , то выбрать можно будет только один пункт. Для добавления пункта в список вызовите метод a d d ( ) . Он имеет два варианта add(String имя add(String имя int индекс) Здесь параметр имя определяет имя элемента, добавленного в список. В первом случае добавляются пункты вконец списка. Во втором случае добавляется пункт в индекс, определяемый параметром индекс Индексация начинается с нуля. Чтобы добавить пункт вконец списка, необходимо указать значение -1 Для тех списков, в которых можно выбрать только один пункт, узнать, какой из пунктов выбран на данный момент, можно с помощью метода g e t S e l e c t e d l t e m ( ) или g e t S e l e c t e d l n d e x ( ) . Эти методы показаны ниже getSelectedltem() int Метод g e t S e l e c t e d l t e m () возвращает строку, содержащую имя пункта. Если выбрано несколько пунктов или не был выбран еще ни один, возвращается значение null. Метод g e t S e l e c t e d l n d e x () возвращает индекс пункта. Первый пункт имеет индекс 0. Если выбрано несколько пунктов или не был выбран еще ни один, возвращается значение -1 Для списков, в которых можно выбирать несколько пунктов, узнать, какие на данный момент выбраны пункты, можно с помощью методов g e t S e l e c t e - d l t e m s ( ) или g e t S e l e c t e d l n d e x e s ( ) . String[] getSelectedltems() i n t [] getSelectedlndexes() 7 9 Часть II. Библиотека Метод) возвращает массив, содержащий имена выбранных на данный момент пунктов. Метод) возвращает массив, содержащий индексы выбранных на данный момент пунктов. Ч тобы узнать, сколько пунктов содержится в списке, вызовите метод g e t 11 em- C o u n t ( ) . С помощью метода s e l e c t () можно определить, какой пункт будет выбран на данный момент для этих целей используется целочисленный индекс, начинающийся с нуля. Эти методы показаны ниже getItemCount() void select(int индекс) Д ля данного индексам ож но получить имя, связанное с пунктом в этом индексе, если вызвать метод g e t I t e m ( ) , который имеет следующую общую форму getltem(int индекс) Здесь параметр индекс представляет индекс требуемого пункта. Обработка списков Для обработки событий списков необходимо реализовать интерфейс. Каждый раз при двойном щелчке на пункте элемента управления класса L i s t создается объект класса A c t i o n E v e n t . Его метод g e t A c t i o n Command () можно использовать для получения имени нового выбранного пункта. Также каждый раз при выборе или отмене выбора пункта при помощи одиночного щелчка создается объект класса I te m E v e n t. Его метод g e t S t a t e C h a n g e d () можно использовать, чтобы узнать, чем было вызвано данное событие выбором пункта или отменой его выбора. Метод) возвращает ссылку на объект, инициировавший данное собы тие. Н иже показан пример, где элементы управления класса C h o ic e из предыдущего раздела заменены компонентами класса L i s t : один — для множественного выбора, а другой — для одиночного Демонстрация применения списков import j a v a .a w t .*; import j a v a .a w t .event.*; import java.applet.*; /* */ public class ListDemo extends Applet implements ActionListener { List os, browser; String msg = "" ; public void in i t () { os = new L i s t (4, true); browser = new L i s t (4, false); // добавление элементов в список os o s .a d d ("Windows XP"); o s .a d d ("Windows 7"); o s .a d d ("Solaris"); o s .a d d ("Mac O S "); // добавление элементов в список browser browser.a d d ("Internet Explorer"); browser.a d d ("Firefox"); browser.a d d ("Opera"); Глава 25. Использование элементов управления, диспетчеров компоновки. 7 9 7 browser.select(1) ; // добавление списков в окно регистрация на получение уведомлений о событиях действия o s .addActionListener(this); browser.addActionListener(this); } public vpid actionPerformed(ActionEvent ae) { repaint(); // Отображение текущего выделения public void paint(Graphics g) { int i d x []; msg = "Current OS: idx = o s .getSelectedlndexes(); for(int i=0; icidx.length; i++) msg += o s .getltem(i d x [i ]) + " "; g .drawstring(msg, 6, 120); msg = "Current Browser: "; msg += browser.getSelectedltem(); g.drawstring(msg, 6, 140); } } Аплет L is tD e m o вовремя выполнения показан на рис. Рис. 25.6. Окно аплета Управление полосами прокрутки Полосы прокрутки используются для выбора непрерывных значений между заданными минимумом и максимумом. Полосы прокрутки могут быть ориентированы вертикально и горизонтально. В действительности полоса прокрутки состо 7 9 Часть II. Библиотека Java ит из нескольких отдельных частей. На обоих концах полосы находится стрелка, щелчок на которой вызывает перемещение текущего значения полосы прокрутки на одну единицу в направлении, указываемом стрелкой. Текущее значение полосы прокрутки по отношению к ее минимальными максимальным значениям обозначается при помощи ползунка полосы прокрутки. Пользователь может перетащить ползунок в другую позицию, после чего полоса прокрутки отобразит новое значение. В фоновой части полосы по обе стороны ползунка пользователь может щелкнуть кнопкой мыши, чтобы осуществить переход в этом направлении сне которым приращением больше 1. Обычно это действие переводится в некоторую разновидность перелистывания страниц вверх и вниз. Полосы прокрутки инкап сулируются классом Класс Scrollbar определяет следующие конструкторы стиль (int стиль int исходноеЗначени е int размерПолзунка, int мин, int макс) Первый вариант создает вертикальную полосу прокрутки. Во втором и третьем вариантах можно задавать ориентацию полосы прокрутки. Если параметр стиль со держит значение Scrollbar .VERTICAL, создается вертикальная полоса прокрутки, а если значение Scrollbar. HORIZONTAL — горизонтальная полоса прокрутки. В третьем варианте конструктора исходное состояние полосы прокрутки определяется параметром исходное Значение Количество единиц, представляемых высотой ползунка, задается параметром размер По лзунка. Минимальные и максимальные значения полосы прокрутки передаются в параметрах мини макс. Если вы создаете полосу прокрутки с помощью одного из первых двух конструкторов, то, прежде чем ее можно будет использовать, вам нужно определить параметры полосы прокрутки с помощью метода setValues () , показанного ниже, void setValues (int исходноеЗначение, int размерПолзунка , int мин int макс) Параметры имеют тоже значение, что ив третьем только что описанном кон структоре. Чтобы узнать текущее значение полосы прокрутки, вызовите метод getVal ue () , который возвращает текущую настройку Чтобы настроить текущее значение, вызовите метод setValue () . Эти методы показаны ниже getValue() void setValue(int новое Значение Здесь параметр новое Значение iопределяет новое значение для полосы прокрутки. Когда вы присваиваете значение, ползунок внутри полосы прокрутки будет расположен так, чтобы соответствовать новому значению. Методы getMinimumf) и getMaximum () позволяют получить минимальные и максимальные значения, int getMinimum() int Методы возвращают соответствующую величину. По умолчанию прокрутка вверх или вниз на одну строку производится с приращением 1, которое добавляется к значению полосы прокрутки или вычитается из него. Изменить приращение можно с помощью метода setUnit Increment (По умолчанию приращением для перелистывания страниц вверх и вниз является 10. Это значение можно изменить методом setBlocklncrement () . Последние два метода показаны далее setUnitlncrement(int новыйИнкремент) void setBlocklncrement(int новыйИнкремент) Глава 25. Использование элементов управления, диспетчеров компоновки. 7 9 Обработка полос прокрутки Для обработки событий полосы прокрутки необходимо реализовать интерфейс A d j u s t m e n t L i s t e n e r . Как только пользователь начинает работать с полосой прокрутки, создается объект класса A d j u s t m e n t E v e n t . Его метод g e tA d - j u s t m e n t T y p e () служит для определения типа настройки. В табл. 25.1 перечислены типы событий настройки. Таблица 25.1. События настройки Событие Описание BLOCK_DECREMENT Произошло событие перелистывания страницы вниз BLOCK_INCREMENT Произошло событие перелистывания страницы вверх |