Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница88 из 90
1   ...   82   83   84   85   86   87   88   89   90
§
Applet
m 107*
Button 108
Button ж
127
Button 128
Button 129
Butt
Hi
147
Button 148
Button 149
Butt
—;
N1167
Button 168
Button 169
Bud
Hi
187
Button 188
Button 189
Butt
; ^
HI
207
Button 208
Button 209
Butt
in 227
Button 228
Button 229
Butt
HI
247
Button 248
Button 249
Butt
m 2 6 7
Button 268
Button 269
Butt
■v
« I .
....
I
HI.. t
- I M
[Applet started Рис. 31.8. Окно аплета Класс Базовым классом списков в библиотеке Swing является класс
JList. Он поддерживает выбор одного или нескольких элементов из списка. Зачастую список состоит из строк, но можно создать список из любых объектов, которые только можно отобразить. Класс
JList настолько часто применяется в Java, что вы уже должны были обязательно с ним встретиться
Глава 31. Дополнительные сведения о библиотеке Ранее элементы в объекте класса
JList были представлены как ссылки на класс
Obj ect. Нос выпуском комплекта 7 класс
JList был сделан обобщением и теперь объявляется так Здесь параметр Е представляет тип элементов в списке.
Класс
JList предлагает несколько конструкторов. Один из наиболее используемых конструкторов выглядит так Е [ ]

элементы)
Этот конструктор создает список класса
JList, содержащий элементы в массиве, определяемые с помощью параметра элементы.
Класс
JList основан на двух моделях. Первая модель — интерфейс
ListModel, который определяет, как осуществляется доступ к данным списка. Второй моделью является интерфейс
List
Select ionModel, который определяет методы, позволяющие узнать, какой элемент (элементы) списка был выбран.
Хотя класс
JList способен без проблем работать самостоятельно, обычно его экземпляр вкладывают в контейнер класса
JScrollPane. Благодаря этому длинные списки автоматически прокручиваются, что упрощает проектирование графического интерфейса. Это позволит также упростить изменение количества записей в списке, не изменяя его размеры.
Класс
JList создает извещение о событии
ListSelectionEvent, когда пользователь выбирает элемент или изменяет выбор элемента. Это событие происходит также тогда, когда пользователь отменяет выбор элемента. Оно обрабатывается слушателем
ListSelectionListener, который определяет только один метод — valueChanged ().
void v a l u e C h a n g e d ( ListSelectionEvent
l e Здесь параметр l e — это ссылка на объект, который создал извещение о событии.
Хотя класс события
ListSelectionEvent тоже предлагает некоторые методы, вы обычно будете использовать сам объект класса
JList, чтобы узнать, что произошло.
Событие
ListSelectionEvent и слушатель
ListSelectionListener определены в пакете j avax.
swing.
По умолчанию класс
JList позволяет пользователю выбирать несколько диапазонов элементов внутри списка, однако вы можете изменить это поведение, вызвав метод set
Select ionModel ()
, который определен в классе
JList. Он показан ниже s e t S e l e c t i o n M o d e (int

режим)
Здесь режим — это режим выбора. Он должен быть представлен одним из следующих значений, определенных интерфейсом
List
Select ionModel.
SINGLE_SELECTION
S I N G LE_INTERVAL_SELECTION
MULTIPLE_I N T E R V A L _ S E L E C T I O По умолчанию используется последнее значение, которое позволяет пользователю выбирать множество диапазонов элементов внутри списка. Если будет задан выбор в единичном интервале
(SINGLE_INTERVAL_SELECTION), пользователь сможет выбрать только один диапазон элементов. Если будет выбрано значение
SINGLE_SELECTION, пользователь сможет выбрать только один элемент. Естественно, один элемент можно выбрать ив двух других режимах. Просто эти режимы позволяют также выбирать диапазон элементов.
Вы можете получить индекс первого выбранного элемента, который будет также являться индексом единственного выбранного элемента в режиме
SINGLE_
SELECTION, если вызовете метод getSelectedlndex ()
, показанный ниже getSelectedlndex()


9 9 2 Часть III. Разработка программного обеспечения с использованием Индексация начинается с нуля. Поэтому если будет выбран первый элемент, метод вернет значение 0. Если не будет выбрано ни одного элемента, будет возвращено значение Вместо того чтобы получать индекс выбранного элемента, вы можете получить значение, связанное с выбранным элементом, вызвав метод get
Select edValue (). Е Метод возвращает ссылку на первое выбранное значение. Если не будет выбрано ни одного значения, он вернет значение На примере следующего аплета демонстрируется использование простого списка класса
JList, хранящего перечень городов. Каждый раз, когда пользователь выбирает город в списке, происходит событие
ListSelectionEvent, обработкой которого занимается метод valueChanged ()
, определенный в слушателе
ListSelectionListener. Он получает индекс выбранного элемента и отображает имя выбранного города в метке Демонстрация применения JList.

import javax.swing.*;
import javax.swing.event.*;
import j a v a .a w t .*;
import j a v a .a w t .event.*;
/*


*/
public class JListDemo extends JApplet {
JList jlst;
JLabel jlab;
JScrollPane jscrlp;
// Создаем массив городов Cities[] = { "New York", "Chicago", "Houston",
"Denver", "Los Angeles", "Seattle",
"London", "Paris", "New Delhi",
"Hong Kon g ", "Tokyo", "Sydney" };
public void ini t () {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void r u n () {
m ak e G U I ();
}
}
) ;
} catch (Exception exc) {
System.out.println("Can't create because of " + exc);
// Невозможно создать из-за " + exc);
}
}
private void mak e G U I () {
// Изменение компоновки потока
setLayout(new FlowLayout());
// Создаем список JList.
jlst = new J L i s t < S t n n g > (Cities)
;
// Присваиваем режиму выбора значение SINGLE_SELECTION.
j1st.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Глава 31. Дополнительные сведения о библиотеке Swing
9 9 3
// Добавляем список в панель с полосами прокрутки
jscrip = new JScrollPane(j1st);
// Задаем предпочтительные размеры панели с полосами прокрутки
jscrip.setPreferredSize(new Dimension(120, 90));
// Создаем метку, в которой будет отображаться выбранный город
jlab = new JLab e l ("Choose a City");
// jlab = new J L Выберите город Добавляем слушатель события выбора для списка
j1 s t .addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent le) {
// Получаем индекс измененного элемента
int idx = j1st.getSelectedlndex();
// Отображаем выбор, если элемент был выбран
i f (idx != -1)
jlab.setText("Current selection: " + Cities[idx]);
// Текущий выбор " + Citi e s [idx]);
else // В противном случае повторно предлагаем выбрать
// город
jlab.setText("Choose a City");
// Выберите город) ;
// Добавляем список и метку в панель содержимого
a d d (j scrip);
a d d (Результат выполнения этого аплета показан на рис. 31.9.
Paris
_
New Delhi
=
Hong Kong

Current selection: London
A pplet Рис. 31.9. Окно аплета С помощью класса
JComboBox библиотеки
Swing определяется компонент, называемый комбинированным списком (комбинация текстового поля и раскрывающегося списка. Как правило, комбинированный список отображает одну запись, но он будет также отображать и раскрывающийся список, позволяющий выбирать другие элементы. Вы можете создать комбинированный список, который позволит вводить выбираемый элемент в текстовом поле.
Applet
Класс
JComboBox
32 Зак 3030

9 9 4 Часть III. Разработка программного обеспечения с использованием Ранее элементы в объекте класса
JComboBox были представлены как ссылки на класс
Object. Нос выпуском JDK 7 класс
JComboBox был сделан обобщением и теперь объявляется так Здесь параметр Е представляет тип элементов в раскрывающемся списке.
Ниже показан конструктор класса
JComboBox, используемый в этом примере (Е [

]
элементы)
Здесь элементы —
это массив, инициализирующий комбинированный список. Кроме него, доступны также и другие конструкторы.
Класс
JComboBox использует модель
ComboBoxModel. Изменяемые комбинированные списки (списки, элементы которых могут изменяться) используют модель Кроме передачи массива элементов, которые должны быть отображены в раскрывающемся списке, элементы можно добавлять динамически в список при помощи метода addltem ()
, показанного ниже Е

объект)
Здесь объект —
это объект, который необходимо добавить в комбинированный список. Этот метод должен использоваться только в изменяемых комбинированных списках.
Класс
JComboBox создает извещение о событии действия, когда пользователь выбирает элемент из списка. Класс
JComboBox также создает извещение особы тии элемента, когда изменяется состояние выбора, что происходит при выборе или отмене выбора элемента. Таким образом, при изменении выбора происходит два события одно — для элемента, выбор которого был отменена другое — для выбранного элемента. Нередко оказывается достаточно простого прослушивания событий действия, однако использовать можно оба типа событий.
Узнать, какой элемент списка был выбран, можно с помощью метода get
Selectedltem().
Object Вам нужно будет привести возвращенное значение к типу объекта, хранящегося в списке. На примере следующего аплета показано использование комбинированного списка. В этом окне содержатся элементы " France", "Germany", " Italy" и "Japan"
. Если пользователь выберет государство, произойдет обновление метки, чтобы в ней был отображен флаг данного государства. Обратите внимание на то, насколько мало кода нужно для того, чтобы использовать этот мощный компонент Демонстрация применения JComboBox.

import j a v a .a w t .*;
import j a v a .a w t .event.*;
import j a v a x . s w i n g ;
/*


*/
public class JComboBoxDemo extends JApplet {
JLabel jlab;
Imagelcon france, germany, italy, japan;
JComboBox jcb;
String flags[] = { "France", "Germany", "Italy", "Japan" };
public void init() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
Глава 31. Дополнительные сведения о библиотеке Swing
9 9 5
public void r u n () {
m a k eGUI();
}
}
)
;
} catch (Exception exc) {
System.out.println("Can't create because of " + exc);
// Невозможно создать из-за " + exc);
}
private void m a keGUI() {
// Изменение компоновки потока
setLayout(new FlowLayout());
// Создание экземпляра комбинированного списка
// и добавление его в панель содержимого
jcb = new JComboBox(flags);
add(jcb);
// Обработка выбранных элементов ActionListener() {
public void actionPerformed(ActionEvent ae) {
String s = (String) jcb.getSelectedltem();
jlab.setlcon(new Imagelcon(s + ".gif"));
}
}) ;
// Создание метки и добавление ее в панель содержимого
jlab = new JLabel(new с i f ")); На рис. 31.10 показан результат выполнения аплета.

Applet Viewer: JComboBoxDemo
||П]|Х|
Applet
и
"; ‘4
Apple
j* < ;
,J
v'*
^
tif
^ ■/>- Рис. 31.10. Окно аплета
JComboBoxDemo
Деревья
Дерево —
это компонент, представляющий иерархический вид данных. В данном представлении пользователь может развертывать или свертывать отдельные узлы. В библиотеке Swing деревья реализуются при помощи класса
J T r e e . Ниже показаны некоторые из его конструкторов

9 9 6 Часть III. Разработка программного обеспечения с использованием Java
JTree(Object объект ])
JTree(Vector
v)
JTree(TreeNode В первом случае дерево создается из элементов массива объект, во втором случае — из элементов вектора (параметр
v).
В третьем случае дерево определяется корневым узлом, который, в свою очередь, определяется соответствующим параметром (Хотя класс
J T r e e входит в состав пакета

j a v a x . sw ing, он поддерживает классы и интерфейсы, которые определены в пакете
j a v a x . sw in g . t r e e . Это объясняется тем, что количество классов и интерфейсов, необходимых для поддержки класса
JT r e e , слишком большое.
Класс
J T r e e базируется на двух моделях — Т г е еМо de l n T r e e S e l e c t i onMode 1. Этот класс поддерживает разнообразные события, однако применительно к деревьям можно выделить три из них —
T re e E x p an sio n E v e n t, T r e e S e le c t io n E v en t и
T reeM odelEvent. Событие
T re e E x p a n sio n E v e n t происходит при развертывании или свертывании узла, событие
T r e e S e le c t io n E v en t
— при выборе пользователем или отмене выбора узла в дереве, а событие
TreeM odel Event
— при изменении данных или структуры дерева. За этими событиями следят слушатели
T r e e E x p a n s io n L is te n e r , T r e e S e l e c t i o n L i s t e n e r и

T r e e M o d e lL iste n e r соответственно. Классы событий дерева и интерфейсы слушателей определены в пакете
j a v a x . sw in g . ev en В примере программы этого раздела обрабатывается событие. Чтобы прослушать это событие, нужно реализовать слушатель
T r e e S e l e c t i o n L i s t e n e r . Он определяет только один метод,
v alu eC h an ged (), который получает объект класса
T r e e S e le c t io n E v e n t
. Вы можете получить путь к выбранному объекту, обратившись к методу
g e t P ath ().
TreePath Метод возвращает объект класса
T reeP ath , который описывает путь к измененному узлу. Класс
T reeP ath
инкапсулирует информацию о пути к определенному узлу в дереве. Он предлагает несколько методов и конструкторов. В этой книге используется только метод
t o S t r i n g ( )
. Он возвращает строку, описывающую путь.
Интерфейс
TreeNode объявляет методы, которые получают информацию об узле дерева. Например, можно получить ссылку на родительский узел или перечень
узлов-потомков. Интерфейс расширяет интерфейс
TreeNode. Он объявляет методы, которые могут вставлять и удалять узлы-потомки или изменять родительский узел.
Класс
D efa u ltM u ta b le T re eN o d e реализует интерфейс
M utableT reeN ode. Он представляет узел в дереве. Ниже показан один из его конструкторов
объект)
Здесь объект

это объект, который необходимо заключить в данном узле дерева. Новый узел дерева не имеет родителя или потомка.
Чтобы создать иерархию из трех узлов, можно использовать метод
add
() класса
Def a u ltM u tab leT reeN o d e. Ниже показана его сигнатура add(MutableTreeNode
потомок)
Здесь потомок —
это изменяющийся узел дерева, который необходимо добавить в качестве потомка текущего узла.
Класс
JT r e e сам по себе не предоставляет никаких возможностей для прокрутки. Поэтому экземпляр класса
J T r e e обычно помещается внутрь контейнера класса
J S c r o ll P a n e . Таким образом, большое дерево можно прокрутить в окне просмотра с меньшими размерами.
Ниже перечислены действия, которые необходимо выполнить, чтобы использовать дерево в аплете.
Глава 31. Дополнительные сведения о библиотеке Swing
9 9 7
1. Создайте экземпляр класса
JT r e e .
2. Создайте экземпляр класса
J S c r o l l P a n e и определите дерево в качестве объекта прокрутки. Добавьте дерево в панель с полосами прокрутки. Добавьте панель с полосами прокрутки в панель содержимого.
В следующем примере показано, как создается дерево и обрабатывается выбор элементов. Программа создает объект класса
D e fa u ltM u ta b leT reeN o d e с заголовком
O ptions Параметры. Он является верхним узлом в иерархии дерева. Затем создаются дополнительные узлы дерева и вызывается метод
add
() для присоединения этих узлов к дереву. Ссылку на верхний узел дерева обеспечивает параметр конструктора класса
JT r e e . После этого дерево указывается в качестве параметра конструктора класса
J S c r o ll P a n e . Эта панель с полосами прокрутки добавляется в аплет. Затем создается метка и добавляется в панель содержимого Эта метка отображает выбор в дереве. Чтобы получать извещения о событиях при выборе, регистрируется слушатель
T r e e S e l e c t i o n L i s t e n e r . Внутри метода v alu eC h an ged
() мы получаем и отображаем путь к текущему месту выбора Демонстрация применения JTree.
import j a v a .a w t .*;
import javax.swing.event.*;
import javax.swing.*;
1   ...   82   83   84   85   86   87   88   89   90


написать администратору сайта