

988
Часть
11.
Библиотека
Java
управления
из
библиотеки
АWT,
если
в
его
приемнике
определяется
функцио
нальный
интерфейс.
Например,
интерфейс
IternListener
также
является
функ
циональным.
Безусловно,
традиционный способ
обработки
событий,
применение
для
этой
цели
анонимного
внутреннего
класса
или лямбда-выражения
зависит
от
характера
прикладной
программы.
В
остальных
примерах,
представленных
да
лее
в
этой
главе,
применяется
традиционный
способ
обработки
событий,
чтобы
исходный
код
этих
примеров
можно
было
скомпилировать
практически
в
любой
версии
Java.
Но
ради
интереса
можно
попытаться
переделать
обычные
обработчи
ки
событий
на
лямбда-выражения
или
анонимные
внутренние
классы
там,
где
это
уместно. Флажки
Флажок чения или
представляет собой элемент управления, предназначенный для вклю отключения какого-нибудь режима. Он состоит из небольшой прямо
угольной
ячейки,
которая
может
содержать
отметку
в
виде
галочки,
если
флажок
установлен,
или
быть
пустой.
Щелчком
на
флажке
можно
изменить
его
текущее
состояние,
т.е.
установить
или
сбросить.
Флажки
могут
использоваться
как
по
от
дельности,
так
и
в группе.
Они
представлены
объектами
класса
Checkbox.
В
классе
Checkbox
поддерживаются
следующие
конструкторы:
Checkbox() |
throws HeadlessException |
|
|
|
|||
Checkbox(String |
строка) |
throws |
HeadlessException |
HeadlessException |
|||
Checkbox(String |
строка, |
boolean |
включено) |
throws |
|||
Checkbox(String |
строка, |
boolean |
включено, |
|
|
||
CheckboxGroup |
группа_флажков) |
throws HeadlessException |
Checkbox(String
boolean
строка, CheckboxGroup группа_флажков, |
|
включено) |
throws HeadlessException |
В |
первой форме конструктора |
создается флажок с |
пустой изначально мет |
|
кой. |
Исходно флажок находится в |
сброшенном состоянии. Во второй форме кон |
||
структора создается флажок, метка которого определяется параметром строка. |
||||
Исходно флажок находится в сброшенном состоянии. |
В третьей |
форме можно |
||
установить исходное состояние флажка. Если параметр |
включено |
принимает ло |
||
гическое значение t rue, то флажок будет исходно установлен, а иначе - сброшен. |
||||
В четвертой и пятой формах создается флажок, метка которого определяется па |
раметром
строка,
а
группа
-
параметром
группа_
флажков.
Если
флажок
не
яв
ляется
частью
группы,
то
параметр
группа_флажков
должен
принимать
пустое
значение
null.
(Группы
флажков
описываются
в
следующем
разделе.)
Значение
параметра включено определяет исходное состояние флажка.
Для получения текущего состояния флажка служит метод getState
(),а
для
его
установки
в
нужное
состояние |
- |
метод
setState
().
Вызвав
метод
get
Label
(),можно
получить
текущую
метку,
связанную
с
флажком.
А
для
того
что
бы
задать
метку,
следует вызвать
метод
setLabel
().
Ниже
приведены
общие
формы
этих
методов.

Глава
26.
Применение
элементов
управления,
диспетчеров
компоновки".
989
boolean getState() void setState(boolean String getLabel() void setLabel(String
включено) строка)
Если
параметр
включено
принимает
логическое
значение
true,
то
флажок
будет
установлен.
А
если
этот
параметр
принимает
логическое
значение
false,
то
флажок
будет
сброшен. Заданная
строка
становится
новой
меткой,
связанной
с
вызывающим
флажком.
Обработка
событий
от
флажков
Всякий
раз,
когда
флажок устанавливается
или
сбрасывается,
наступает
со
бытие
от
элемента.
Извещение
о
нем
передается
любому
приемнику
событий,
который
ранее
зарегистрировался
на
получение
извещений
о
событиях
от
эле
ментов
данного
компонента.
Каждый
приемник
событий
реализует
интерфейс
ItemListener.
В этом
интерфейсе
определяется метод
itemStateChanged
().
Объект класса ItemEvent задается в качестве параметра данного держит сведения о событии (например, выбор или отмена выбора).
метода.
Он
со
В
приведенном
ниже
примере
прикладной
программы
демонстрируется
соз
дание и применение четырех флажков.
Состояние всех флажков отображается в
Исходно установлен первый
окне прикладной программы.
флажок. Оно об
новляется
всякий
раз,
когда
изменяется
состояние
любого
флажка.
/!Продемонстрировать
применение
флажков
import |
java.awt.*; |
|
|
|
|
import |
java.awt.event.*; |
|
|
|
|
puЫic |
class CheckboxDemo |
extends |
Frarne |
irnplements |
ItemListener |
String rnsg |
= |
""; |
|
|
|
|
|
|
Checkbox windows, |
android, |
solaris, |
mac; |
|||||
puЬlic CheckboxDerno() |
{ |
|
|
|||||
//использовать |
диспетчер |
поточной |
компоновки |
|||||
setLayout(new |
FlowLayout()); |
|
||||||
11 |
создать |
флажки |
|
|
true) ; |
|||
windows |
|
new |
Checkbox ("Windows", |
|||||
android |
= |
new |
Checkbox("Android"); |
|
||||
solaris |
= |
new |
Checkbox("Solaris"); |
|
||||
rnac |
= new |
Checkbox("Mac OS"); |
|
|||||
// |
ввести |
флажки |
в |
фрейм |
|
|
||
add (windows) ; |
|
|
|
|
|
|||
add(android); |
|
|
|
|
|
|||
add(solaris); |
|
|
|
|
|
|||
add (rnac) |
; |
|
|
|
|
|
|
{
11
ввести
приемники
событий
в
отдельных
элементах
windows.additernListener(this);







996
Часть
11.
Библиотека
Java
треть,
прокрутив
список.
Третья
форма
позволяет
выбрать
одновременно два
или
несколько
элементов
из
списка,
если
параметр
выбор_нескольких_элементов
принимает
логическое
значение
true.
Если
же
этот
параметр
принимает
логическое
значение
false,
то из
списка
можно
будет
выбрать только
один
элемент.
Для ввода
две формы:
элемента
в
список
следует
вызвать
метод
add
(
) ,
у
которого
имеются
void void
add(String add(String
имя) имя,
int
индекс)
Здесь
параметр
имя
обозначает
имя
элемента,
вводимого
в
список.
В
первой
форме
элементы
вводятся
в
конце
списка,
а
во
второй
элемент
вводится
в
список
по
указанному
индексу.
Индексация
элементов
в списке
начинается
с
нуля.
Чтобы
ввести
элемент
в
конце
списка,
следует
указать
значение
-1
параметра
индекс.
Чтобы
выяснить,
какой
элемент
выбран
в
данный момент
из
тех
списков,
где
допу
скается выбирать только один элемент, следует вызвать метод getSelecteditem или getSelectedindex ().Ниже приведены общие формы этих методов.
()
String getSelecteditem() int getSelectedindex()
Метод
getSelecteditem
()
возвращает
символьную
строку,
содержащую
имя
элемента.
Если
выбрано
несколько
элементов
или
пока
еще
не
выбран
ни
один
из
них,
то
возвращается
пустое
значение
null.
Метод
getSelectedindex
()
возвращает индекс выбранного элемента. Первый элемент имеет нулевой Если же выбрано несколько элементов или пока еще не выбран ни один из
индекс. них, то
возвращается пустое значение -1. |
|
|
Чтобы выяснить, какие |
элементы выбраны в |
|
допускается одновременно |
выбирать |
несколько |
данный момент из тех списков, где элементов, следует вызвать метод
getSelecteditems ()
или
getSelectedindexes
().
В
частности,
метод
get
Selecteditems
()
возвращает
массив,
содержащий
имена
выбранных
на
данный
момент
элементов,
а
метод
getSelectedindexes
() |
- |
массив,
содержащий
индек
сы
выбранных
в
данный
момент
элементов.
Ниже
приведены
общие
формы
этих
ме
тодов. |
|
|
String(] |
getSelecteditems() |
|
int[J |
getSelectedindexes() |
Чтобы
выяснить,
сколько
элементов
содержится
в
списке,
следует
вызвать
ме
тод
getitemCount
().А
с
помощью
метода
select
()
можно
определить,
какой
именно
элемент
выбран
в
данный
момент.
Для
этих
целей
служит
целочисленный
индекс,
начинающийся
с
нуля.
Ниже
приведены
общие
формы
этих
методов.
int void
getitemCount() select(int индекс)
По
указанному
индексу
можно
получить
имя,
связанное
с
элементом,
доступным
по
этому
индексу,
если
вызвать
метод
getitem
().Этот
метод имеет
приведенную
ниже
общую
форму,
где
индекс
обозначает
конкретный
индекс
требуемого
элемента.
String
getitem(int
индекс)






1002
Часть
11.
Библиотека
Java
11 |
показать |
текущее положение перемещаемой |
g. drawString ( "*", horz SB. getValue ( J , |
||
|
|
vertSB.getValue()); |
мыши
puЬlic static void main(String[] |
args) |
{ |
||
SBDemo appwin = new |
SBDemo(); |
|
1 80)); |
|
appwin.setSize(new |
Dimension(ЗOO, |
|||
appwin.setTitle("SBDemo"); |
|
|
|
|
appwin.setVisiЬle(true); |
|
|
|
Пример прокрутки вертикальной и горизонтальной программы SBDemo приведен на рис. 26.7.
полос
в
окне
прикладной
SВD~mo
-----l=П-sl
Vertical
:
103,
Horizontal
:
48
Рис.
26.7.
Прокрутка
вертикальной
и
горизонтальной
полос
в
окне
прикладной
программы
SBDemo
Текстовые
поля
Класс
TextField
реализует однострочную
область
для
ввода
текста,
которая
называется
текстовым
полем.
В
текстовых
полях
пользователь
может
вводить
текст
построчно
и
редактировать
его.
Класс
TextField
является
производным
от
класса
TextComponent
и
имеет
следующие
конструкторы:
TextField() |
throws HeadlessException |
|
TextField(int количество_символов) |
throws |
HeadlessExcepti
on
TextField(String
TextField(String
throws
строка) |
throws HeadlessException |
строка, |
int количество_символов) |
HeadlessException |
В
первой
форме
конструктора
создается
текстовое
поле,
а
во
второй
форме
-
тек
стовое
поле шириной,
равной
заданному
количеству_символов.
В
третьей
форме
конструктора
создаваемое
текстовое
поле
инициализируется
указанной
строкой,
а
в
четвертой
форме
-
текстовое
поле
не
только
инициализируется
указанной
строкой,
но
и
получает
ширину,
равную
заданному
количеству_символов.
В
классе
TextField
и
его
суперклассе
TextComponent
предоставляется
ряд
методов
для
обращения
с
текстовыми
полями
.
Чтобы
получить
строку
из
тек
стового
поля,
следует
вызвать
метод
getText
(),
а
для
того
чтобы
задать
в
нем
текст
-
метод
setText
().
Ниже
приведены
общие
формы
этих методов,
где
строка
обозначает
новую
строку
текста.




1006
Часть
11.
Библиотека
Java
Класс
TextArea
предоставляет
следующие
дополнительные
методы:
void void void
append(String |
строка) |
|
|
insert(String |
строка, |
int индекс) |
|
replaceRange(String строка, |
int начальный_индекс, |
||
|
int конечный_индекс) |
Метод append ( )
вводит
заданную
строку
в
конце
текущего
текста.
Метод
insert
()
вставляет
заданную
строку
по
указанному
индексу.
Чтобы
заменить
текст,
следует
вызвать
метод
replaceRange
().
Он
заменяет
символы
от
пози
ции
начальный_индекс
и
до
позиции
конечный_индекс-l
текстом
из
задан
ной строки. Текстовые
области
являются
практически
автономными
элементами
управле
ния,
а
следовательно,
для
управления
ими
прикладная
программа
не
несет
допол
нительные
издержки.
Как
правило,
прикладная
программа
лишь
получает
текущий
текст
по
мере
надобности.
Но
при
желании
можно
организовать
прием
и обработ
ку событий типа TextEvent.
В следующем примере прикладной
программы
создается
элемент
управления
типа
TextArea.
11
Продемонстрировать
применение текстовой
области
import import
java.awt.*; java.awt.event
.*;
puЬlic class TextAreaDemo |
extends |
Frame |
|
puЬlic TextAreaDemo() |
{ |
|
|
{
11
использовать
диспетчер поточной
компоновки
setLayout(new |
FlowLayout()); |
|
|
|
|
|
|||||||||
String val |
= |
|
|
|
|
|
|
|
|
|
|
|
|
||
"Java |
9 |
is |
the |
latest |
version of |
the |
most\n" |
|
|||||||
+ |
"widely-used |
computer |
language |
for |
Internet " |
|
|||||||||
+ |
"programming.\n" |
|
|
|
|
|
|
|
|
|
|||||
+ |
"Building |
on |
а rich |
heritage, |
Java |
has |
advanced |
||||||||
+ |
"both\n" |
|
|
|
|
|
|
|
|
|
|
|
|
||
+ |
"the |
art |
and |
science |
of |
computer language " |
|
||||||||
+ |
"design. |
\n\n" |
|
|
|
|
|
|
|
|
|
||||
+ |
"One |
of |
the |
reasons |
for |
Java's |
ongoing |
success |
|
||||||
+ |
"is |
its\n" |
|
|
|
|
|
|
|
|
|
|
|
||
+ |
"constant, |
steady |
rate |
|
of |
evolution. Java has |
" |
||||||||
+ |
"never |
stood\n" |
|
|
|
|
|
|
|
|
|
||||
+ |
"still. |
Instead, |
Java |
has |
consistently |
adapted |
|
||||||||
+ |
"to |
the\n" |
|
|
|
|
|
|
|
|
|
|
|
||
+ |
"rapidly |
changing |
landscape of |
the |
networked " |
|
|||||||||
+ |
"world. \n" |
|
|
|
|
|
|
|
|
|
|
|
|||
+ |
"Moreover, |
Java has often |
led |
the |
way, |
charting |
|||||||||
+ |
"the\n" |
+ |
"course |
for |
others to follow."; |
|
"
"
"
"
TextArea text add (text);
=
new
TextArea(val,
10,
30);
addWindowListener(new WindowAdapter()




1010
Часть
11.
Библиотека
Java
Класс
BorderLayou
t
Этот класс
реализует
общий
стиль
граничной
компоновки
для
окон
передне
го
плана.
Он
имеет
четыре
узких
компонента
фиксированной
ширины
по
краям
и одну крупную север, юг, запад
область и восток,
в а
центре. область
Четыре стороны именуются по сторонам света: посредине называется центром. Ниже приведе
ны
конструкторы,
определяемые
в
классе
BorderLayou
t.
BorderLayout ()
BorderLayout(int
горизонтально,
int
вертикально)
В
первой
форме
конструктора
выполняется
граничная
компоновка
по
умолча
нию.
А
во
второй
форме
в
качестве
параметров
горизонтально
и
вертикально
устанавливается
горизонтальный
и
вертикальный
промежутки
между
компо
нентами. В классе BorderLayout определяются
ластей граничной компоновки:
следующие
константы
для
указания
об
BorderLayout.CENTER |
BorderLayout.SOUTH |
|
|
BorderLayout.EAST |
BorderLayout.WEST |
|
|
BorderLayout.NORTH |
|
|
|
Эти константы обычно |
используются при вводе компонентов |
в |
|
с помощью следующей формы метода add () |
из класса Container: |
|
|
void add(Component ссылка_на_компонент, |
Object область) |
|
компоновку
Здесь
параметр
ссылка_на_компонент
обозначает
ссылку
на
вводимый
ком
понент, а область - |
место для ввода компонента в компоновку. |
Ниже приведен пример граничной компоновки, где в каждой области |
|
ется отдельный компонент. |
размеща
11
Продемонстрировать
применение
граничной
компоновки
import java.awt.*; |
|
|
|
import |
java.awt.event.*; |
|
|
puЬlic |
class BorderLayoutDemo |
extends |
|
puЫic BorderLayoutDemo() |
{ |
|
Frame
{
11 11
в данном случае используется по
диспетчер умолчанию
граничной
компоновки
add(new |
Button("This is |
across the |
top."), |
|
BorderLayout.NORTH); |
|
might go |
here."), |
|
add(new |
Label("The footer message |
|||
BorderLayout.SOUTH); |
BorderLayout.EAST); |
|||
add(new |
Button("Right"), |
|||
add(new |
Button("Left"), |
BorderLayout.WEST); |
|
String
msg
= |
"The reasonaЬle |
man adapts |
" |
|
||
+ |
"himself to the |
world;\n" |
|
|
||
+ |
"the unreasonaЫe |
one |
persists |
in " |
||
+ |
"trying to adapt |
the |
world |
to |
himself.\n" |










1020
Часть
11.
Библиотека
Java
GridBagConstraints.CENTER
GridBagConstraints.EAST
GridBagConstraints.NORTH
GridBagConstraints.NORTHEAST
GridBagConstraints.NORTНWEST
GridBagConstraints.SOUTH
GridBagConstraints.SOUTHEAST
GridBagConstraints.SOUTНWEST
GridBagConstraints.WEST
Второй
тип
значений,
которые
можно
присвоить
полю
anchor,
является
относи
тельным,
т.е.
они
указываются
относительно
ориентации
контейнера,
которая в
вос
точных
языках
может
быть
другой.
Относительные
значения
констант
перечислены
ниже.
Их
имена
описывают
расположение
компонентов
относительно
ячейки.
GridBagConstraints.FIRST_LINE_END
GridBagConstraints.FIRST_LINE_START
GridBagConstraints.LAST_LINE_END
GridBagConstraints.LAST_LINE_START
GridBagConstraints.LINE_END |
|
GridBagConstraints.LINE_START |
|
GridBagConstraints.PAGE |
END |
GridBagConstraints.PAGE |
START |
ет
Третий тип значений, которые могут быть присвоены |
полю anchor, позволя |
размещать компоненты вертикально по отношению к |
базовой линии строки. |
Значения
констант
этого
типа
перечислены
ниже.
При
горизонтальном
располо
жении
центровка
может
выполняться
относительно
переднего
(LEADING)
или
за
днего
(TRAILING)
края.
GridBagConstraints.BASELINE
GridBagConstraints.BASELINE_
TRAILING
GridBagConstraints.ABOVE_
BASELINE_LEADING
GridBagConstraints.BELOW_
BASELINE
GridBagConstraints.BELOW_
BASELINE_TRAILING
GridBagConstraints.BASELINE_LEADING
GridBagConstraints.ABOVE_BASELINE
GridBagConstraints.ABOVE_BASELINE_
TRAILING
GridBagconstraints.BELOW_BASELINE_
LEADING
Поля
weightx
и
weighty
очень
важны,
хотя
они
и
кажутся
на
первый
взгляд
непонятными.
Их
значения
определяют,
сколько
дополнительного
пространства
будет
выделено в
контейнере
для
каждой
строки
и
каждого
столбца.
По
умолча
нию
оба
поля
имеют
нулевые
значения.
Если
все
значения
в
столбце
и
строке
ока
зываются
нулевыми,
то
дополнительный
промежуток
распределяется
равномерно
между
краями
окна.
Увеличивая вес,
можно
увеличить
распределение
свободного
пространства
для
строки
или
столбца
пропорционально
остальным
строкам
или
столбцам.
Самый
лучший
способ
уяснить назначения
этих
полей
-
поэксперимен
тировать с ними на конкретном примере.
В поле gridwidth можно задать ширину
ячейки
в
единицах
ячейки.
По
умолча
нию
эта
переменная
принимает
значение
1.
Чтобы
компонент
использовал
свобод
ное
пространство
в
строке,
следует
установить
значение
GridBagConstraints.
REМAINDER,
а
для
того
чтобы
компонент
мог
использовать
предпоследнюю
ячейку
в
строке
-
значение
GridBagConstraints.
RELATIVE.
Аналогично
действует
ограничение,
налагаемое
в
поле
gr
i
dhe
i
g h
t,
но
только
в
вертикальном
направлении.


1022
Часть
11.
Библиотека
Java
gbag.setConstraints(solaris,
gbc);
gbc.gridwidth = GridBagConstraints.REМAINDER;
gbag.setConstraints(mac, gbc);
11
ввести
компоненты
add(windows); add(android); add ( solaris) ; add (mac);
11 зарегистрировать приемники |
событий |
в |
windows.additemListener(this); |
|
|
android.additemListener(this); |
|
|
solaris.additemListener(this); |
|
|
mac.additemListener(this); |
|
|
addWindowListener(new WindowAdapter() |
|
|
puЬlic void windowClosing(WindowEvent |
||
System.exit(O); |
|
|
} |
|
|
} ) ; |
|
|
элементах
we) |
{ |
11 11
воспроизвести повторно,
состояние флажка
когда
изменится
puЬlic void repaint();
itemStateChanged(ItemEvent
ie)
11
отобразить
текущее
состояние
флажков
puЬlic |
|
void |
paint(Graphics g) |
{ |
|||
msg |
= |
"Current |
state: |
"; |
|
||
g.drawString(msg, |
20, |
100); |
|
||||
msg |
= |
" |
Windows: |
" + |
windows.getState(); |
||
g.drawString(msg, |
30, |
120); |
|
||||
msg |
= |
" |
Android: |
" + |
android.getState(); |
||
g.drawString(msg, |
30, |
140); |
|
||||
msg |
= |
" |
Solaris: |
" + |
solaris.getState(); |
||
g.drawstring(msg, |
30, |
160); |
|
||||
msg |
= |
" |
Мае: |
" + |
mac.getState(); |
||
g.drawString(msg, |
30, |
180); |
|
puЬlic static GridBagDemo
void main(String[J |
args) |
{ |
appwin = new GridBagDemo(); |
appwin.setSize(new Dimension(250, appwin. setTitle ( "GridBagDemo"); appwin.setVisiЬle(true);
200));
Пример сеточно-контейнерной компоновки элементов управления прикладной программы GridBagDemo приведен на рис. 26.15.
ГПИ
в
окне












