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

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


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница87 из 90
1   ...   82   83   84   85   86   87   88   89   90

ГЛАВА
Дополнительные сведения о библиотеке В предыдущей главе были рассмотрены некоторые базовые концепции библиотеки Swing и показана общая форма приложения и аплета, основанных на библиотеке Swing. В этой главе продолжим обсуждение библиотеки Swing, предоставляя описание ряда ее компонентов, таких как кнопки, флажки, деревья и таблицы. Компоненты библиотеки Swing обладают богатыми функциональными возможностями и предлагают широкие возможности по их настройке. К сожалению, в этой книге невозможно описать все особенности и атрибуты компонентов, поэтому рассмотрим лишь некоторые из них.
Классы компонентов библиотеки Swing, рассматриваемых в этой главе, показаны ниже в виде таблицы L a b e 1
JList
JRadioButton
JScrollPane
JTabbedPane
JTable
JTextField
J Все эти компоненты являются облегченными это означает, что все они происходят от класса В этой главе будут использоваться также класс
ButtonGroup, который инкапсу­
лирует набор взаимоисключающих кнопок библиотеки Swing, и класс
Image
Icon, инкапсулирующий графическое изображение. Каждый из них определен в библиотеки Swing и включен в пакет j avax.
И еще один момент. Компоненты библиотеки Swing демонстрируются в апле­
тах, поскольку код аплета более компактный, чем код настольного приложения, а технологии к ним применяются одни и те же.
Классы
JLabel и
Image Самым простым в использовании компонентом библиотеки Swing является класс
JLabel. Мы рассматривали его в предыдущей главе, ивы уже знаете, что он создает метку. В этой главе поговорим о нем подробнее. Класс
JLabel можно использовать для отображения текста и или значка (пиктограммы. Этот компонент является пассивным в том смысле, что не реагирует на данные, вводимые пользователем. Класс
JLabel определяет несколько конструкторов. Ниже показаны три из них значок a b e l (String строка a b e l (String строка Icon значок int

выравнивание)
Здесь параметры строка из нач о к представляют текст и значок, которые будут использоваться для метки. Параметр выравнивание определяет выравнива-

9 7 4 Часть III. Разработка программного обеспечения с использованием Java
ние текста и или значка по горизонтали внутри метки. Он должен иметь одно из следующих значений
LEFT, RIGHT, CENTER, LEADING или
TRAILING. Наряду с некоторыми другими константами, используемыми в классах библиотеки Swing, эти константы определены в интерфейсе Обратите внимание на то, что значки определяются с помощью объектов, имеющих тип
Icon, который представляет собой интерфейс, определенный в библиотеке Swing. Получить значок проще всего можно при помощи класса
Image
Icon. Класс
Image
Icon реализует
Icon и инкапсулирует изображение. Таким образом, объект класса
Image
Icon можно передать с помощью параметра
Icon конструктора класса
JLabel. Предоставить изображение можно несколькими способами, включая чтение изображения из файла или его загрузку из места, определенного с помощью адреса URL. Ниже показан конструктор класса
ImageIcon, используемый в примере этого раздела

имяфайла
)
Он получает изображение из файла, имя которого указано в параметре
имяфайла.
Значок и текст, связанные сметкой, можно получить с помощью следующих методов getlcon()
String Значок и текст, связанные сметкой, можно установить с применением таких методов setIcon(Icon значок setText(String
строка)
Здесь значок и строка представляют значок и текст соответственно. Таким образом, с помощью метода setText
() можно изменить текст внутри метки вовремя работы программы.
На примере следующего аплета показано, как создается и отображается метка, содержащая значок и строку. Аплет начинается с создания объекта класса
Imagelcon из файла france.gif, который отображает государственный флаг Франции. Это изображение используется в качестве второго параметра конструктора класса
JLabel. Первый и последний параметры конструктора класса
JLabel представляют текст метки и его выравнивание. В конце аплета метка добавляется в панель содержимого Пример JLabel и Imagelcon.
import j a v a .a w t .*;
import j ava x .swing.*;
/*


*/
public class JLabelDemo extends JApplet {
public void ini t () {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {
m ak e G U I ();
) ;
}
}
Глава 31. Дополнительные сведения о библиотеке Swing
9 7 5
} catch (Exception exc) {
S y s t e m . o u t . p r i n t l n (" C a n 't create because of " + e x c ) ;
// S y s t e m . o u t . p r i n t l n (Невозможно создать из-за " + e x c ) ;
}
}
private void m a k e G U I () {
// Создание значка ii = new I m a g e l c o n ("fran с e . g i f ");
// Создание метки jl = n ew J L a b e l ("F r a n c e ", ii, J L a b e l .C E N T E R ) ;
// Добавление метки в панель содержимого
a d d (j На рис. 31.1 показана полученная метка Рис. 31.1. Окно аплета
J L a b e l D e m Класс Класс
JTextField
— это простейший текстовый компонент библиотеки Swing. Более того, это, пожалуй, наиболее широко используемый текстовый компонент. Класс
JTextField позволяет редактировать одну строку текста. Он происходит от класса
JTextComponent, который наделяет функциональными возможностями текстовые компоненты библиотеки Swing. Для своей модели класс
JTextField использует интерфейс Ниже показаны три конструктора класса
JTextField.
J T e x t F i e l d (int цвета T e x t F i e ld(String строка int цвета T e x t F i e ld(String
строка)
Здесь строка — это первоначально представляемая строка, а цвета — количество столбцов в текстовом поле. Если строка не будет задана, то текстовое поле первоначально будет пустым. Если не будет задано количество столбцов, то размер текстового поля будет выбран так, чтобы оно могло уместиться в указанной строке

9 7 6 Часть III. Разработка программного обеспечения с использованием Класс
JText
Fie создает извещение о событии в ответ на действия пользователя. Например, событие класса
ActionEvent происходит при нажатии пользователем клавиши . Событие
Caret
Event происходит при каждом изменении позиции каретки (те. курсора. (Событие
Caret
Event определено в пакете javax. swing, event.) Произойти могут и другие события. Как правило, вашей программе ненужно будет обрабатывать эти события. Наоборот, выбудете просто получать строку, находящуюся в данный момент в текстовом поле. Для ее получения необходимо вызвать метод getText (Ниже показан пример применения класса
JText
Field. В этом аплете создается объект класса
JText
Field и добавляется в панель содержимого. Когда пользователь нажимает клавишу , происходит событие действия. В результате этого события отображается текст в окне состояния Демонстрация применения JTextField.

import j a v a .a w t .*;
import java.a w t .e v e n t ;
import javax.swing.*;
/*


*/
public class JTextFieldDemo extends JApplet {
JTextField jtf;
public void init() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {
m a k 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());
// Добавление текста в панель содержимого
jtf = new JTextField(15);
add(jtf);
j t f .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Отображаем текст, когда пользователь нажимает Enter.
showStatus(jtf.getText());
}
}) На рис. 31.2 показан пример полученного текстового поля
Глава 31. Дополнительные сведения о библиотеке Swing
9 7 7
А
НИИ
Applet
This is a test |
This is a Рис. 31.2. Окно аплета Кнопки библиотеки В библиотеке Swing определено четыре класса кнопок —
JButton, JToggle-
Button, JCheckBox и
JRadioButton. Все они являются подклассами класса
AbstractButton, который расширяет класс
JComponent. Таким образом, у кнопок есть общие характерные черты.
Класс
AbstractButton содержит множество методов, позволяющих управлять поведением кнопок. Например, вы можете определить различные значки, которые будут отображаться на месте кнопки, когда она будет отключена, нажата или выбрана. Другой значок можно использовать в качестве значка-наката
(rollover), который будет отображаться при наведении указателя мыши на кнопку. Ниже показаны методы, с помощью которых можно задавать эти значки oid s e t D i s a b l e d l c o n (Icon

d i )
v oid s e t P r e s s e d l c o n (Icon
p i )
void s e t S e l e c t e d l c o n (Icon
s i )
void s e t R o l l o v e r l c o n (Icon Параметры d i, p i , s i и r i определяют значки, используемые для различных состояний. Текст, связанный с кнопкой, можно прочитать и записать при помощи следующих методов g e t T e x t ()
void setText(String
строка)
Здесь строка — это текст, который будет связан с кнопкой,
Модель, используемая всеми кнопками, определена интерфейсом
ButtonModel. Кнопка извещает о событии действия, когда ее нажимает пользователь. Возможны также и другие события. Сейчас поговорим о каждом конкретном классе кнопки.
Класс
JButton определяет функциональные возможности экранной кнопки. В предыдущей главе вы уже могли с ним вкратце познакомиться. Он позволяет связывать с кнопкой на экране значок, строку или оба этих элемента вместе. Ниже показаны три его конструктора Button(Icon значок строка B utton(String строка Icon

значок)
Здесь значок и строка представляют значок и строку, которые используются для кнопки. Когда пользователь нажимает кнопку (щелкает на ней, происходит событие класса
ActionEvent. С помощью объекта класса
ActionEvent, переданного методу actionPerf ormed
() зарегистрированного слушателя
Класс
J B u t t o n

9 7 8 Часть III. Разработка программного обеспечения с использованием Java
A c t i o n L i s t e n e r , вы. можете получить командную строку действия, связанную с кнопкой. По умолчанию эта строка будет отображаться внутри кнопки. Однако команду действия можно задать, вызвав метод setA ctio n C o iran an d () в отношении кнопки. Получить команду действия можно, вызвав метод getA ctionC o m m and () для объекта события. Он объявляемся следующим образом Команда действия идентифицирует кнопку. Таким образом, при использовании двух или более кнопок водном приложении команда действия позволяет легко определить, какая кнопка была нажата.
В предыдущей главе был показан пример текстовой кнопки. В следующем примере демонстрируется кнопка со значком. В нем отображаются четыре кнопки и одна метка. Каждая кнопка отображает значок, представляющий флаг государства. Когда пользователь щелкает на кнопке, в метке появляется название государства Пример использования кнопки JButton со значком
import j a v a .a w t .*;
import j a v a .a w t .event.*;
import javax.swing.*;
/*


*/
public class JButtonDemo extends JApplet
implements ActionListener {
JLabel jlab;
public void i n i t O {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void r u n () {
mak e G U I ();
}
}
) ;
} catch (Exception exc) {
System.out.println("Can't create because of " + exc);
// System, out .println (Невозможно создать из-за
+ exc);
}
}
private void mak e G U I () {
// Изменение компоновки потока
setLayout(new FlowLayout());
// Добавление кнопок в панель содержимого france = new Imagelcon("france.g i f ");
JButton jb = new JButton(france);
jb.setActionCommand("France");
jb.addActionListener(this);
add(jb);
Imagelcon germany = new Imagelcon("germany.g i f ");
jb = new JButton(germany);
jb.setActionCommand("Germany");
jb.addActionListener(this);
add(jb);
Imagelcon italy = new Imagelcon("italy.gi f ");
jb = new JButton(italy);
j b .setActionCommand("Italy");
jb.addActionListener(this);
a d d (jb);
Глава 31. Дополнительные сведения о библиотеке Swing
9 7 9
Imagelcon japan = new Imagelcon("japan.gif");
jb = new JButton(japan);
jb.setActionCommand("Japan");
jb.addActionListener(this)
;
add(jb);
// Создаем и добавляем метку в панель содержимого
jlab = new JL a b e l ("Choose a Flag");
add(jlab);
// Обработка событий кнопки void actionPerformed(ActionEvent ae) {
j lab.setText("You selected " + a e .getActionCommand());
// Выбрана " + a e На рис. 31.3 показан результат выполнения этого аплета.
шт
Applet
Applet Viewer: JButtonDemo 11

|[пЦ"Х|
Уои selected Japan
Applet Рис. 31.3. Окно аплета
JButtonDemo

9 8 0 Часть III. Разработка программного обеспечения с использованием Класс
J T o g g l e B u t t o Полезной разновидностью кнопки является тумблер (toggle button). Тумблер выглядит подобно обычной кнопке, но действует по-другому, так как у него может быть два состояния нажатое и отжатое. То есть, когда вы нажимаете тумблер, он остается нажатым, а не отжимается подобно обычной кнопке. Если после этого нажать тумблер еще раз, он будет отжат. Таким образом, каждый раз, когда пользователь нажимает тумблер, последний принимает одно из двух возможных состояний.
Тумблеры являются объектами класса
JToggleButton. Класс
JToggleButton реализует класс
AbstractButton. Кроме создания стандартных тумблеров,
JToggkeButton является суперклассом двух других компонентов библиотеки Swing, которые также представляют элементы управления, имеющие два состояния. Это классы
JCheckBox и
JRadioButton. Таким образом, класс
JToggleButton определяет базовые функции компонентов, обладающих двумя состояниями.
Класс
JToggleButton определяет несколько конструкторов. Один из них, используемый в примере этого раздела, выглядит так
строка)
Он создает тумблер, содержащий текст, заданный с помощью параметра строка Стандартное состояние тумблера — отжатое. Остальные конструкторы позволяют создавать тумблеры, содержащие изображения или изображения и текст.
Класс
JToggleButton использует модель, определенную во вложенном классе
JToggleButton
.
ToggleButtonModel. Как правило, вам не придется взаимодействовать непосредственно с моделью, чтобы использовать стандартный тумблер.
Как и класс
JButton, класс
JToggleButton создает извещение о событии действия каждый раз, когда пользователь нажимает тумблер. Однако, в отличие от класса
JButton, класс
JToggleButton также создает извещение о событии элемента. Это событие используется компонентами, которые поддерживают принцип выбора. Если тумблеркласса
JToggleButton нажат, он является выбранным. Если пользователь отжимает его, выбор отменяется.
Для обработки событий элемента нужно реализовать интерфейсе

г.
Из главы 23 вы должны помнить, что при каждом создании извещения о событии элемента оно передается методу
itemStateChanged ()
, определенному винтер фейсе
ItemListener. В методе
itemStateChanged
() метод
getltem() может быть вызван в объекте класса
11
emEvent
, чтобы получить ссылку на экземпляр класса
JToggleButton, создавший извещение о событии. Этот метод показан ниже Он возвращает ссылку на кнопку. Вам нужно будет привести эту ссылку к классу
JToggleButton.
Самый простой способ определить состояние тумблера предусматривает вызов метода
isSelected() он является наследником класса
AbstractButton) для кнопки, создавшей извещение о событии. Этот метод выглядит следующим образом Он возвращает значение
true, если кнопка была выбрана, в противном случае он возвращает значение Ниже показан пример, в котором используется тумблер. Обратите внимание на слушателя событий. Он просто вызывает метод
isSelected(), чтобы определить состояние кнопки
Глава 31. Дополнительные сведения о библиотеке Swing
// Демонстрация применения JToggleButton.
import java.awt.*;
import j a v a .a w t .event.*;
import javax.swing.*;
/*


*/
public class JToggleButtonDemo extends JApplet {
JLabel jlab;
JToggleButton jtbn;
public void init() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void r u n () {
m a keGUI();
}
}
) ;
} catch (Exception exc) Невозможно создать из-за "
}
}
private void mak e G U I () {
// Изменение компоновки потока
setLayout(new FlowLayout());
// Создаем метку = new JL a b e l ("Button is off.");
// jlab = new J L Кнопка отжата Создаем тумблер = new JToggleButton("On/Off");
// Добавляем слушатель событий для тумблера
jtbn.addltemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
i f (j tbn.isSelected())
jlab.setText("Button is on.");
// Кнопка нажата
else
jlab.setText("Button is off.");
// Кнопка отжата) ;
// Добавляем тумблер и метку в панбль содержимого
add(jtbn);
a d d (jlab);
}
}
+ Результат выполнения этого аплета показан на рис. 31.4.

9 8 2 Часть III. Разработка программного обеспечения с использованием ш is on.
Applet Рис. 31.4. Окно аплета
JToggleButtonDemo
Флажки
Класс
JCheckBox определяет функции флажка. Его суперклассом является класс
JToggleButton, который обеспечивает поддержку кнопок с двумя состояниями (о них мы только что говорили. Класс
JCheckBox определяет несколько конструкторов. Один из них выглядит следующим образом

строка)
Этот конструктор создает флажок с текстом, определенным с помощью параметра строка в качестве метки. Остальные конструкторы позволяют определить исходное состояние выбора кнопки и задать значок.
Если пользователь устанавливает или сбрасывает флажок, создается извещение о событии класса
ItemEvent. Вы можете получить ссылку на флажок класса
JCheckBox, создавший извещение о событии, вызвав метод get
Item
() в объекте класса
ItemEvent, который передан методу itemStateChanged ()
, определенному в интерфейсе
ItemListener. Определить выбранное состояние проще всего, вызвав метод isSelected
() в экземпляре класса В следующем аплете демонстрируется использование флажков. Аплет отображает четыре флажка и метку. Когда пользователь щелкает на флажке, происходит событие класса
ItemEvent. В методе itemStateChanged
() вызывается метод get
Item
() для получения ссылки на объект класса
JCheckBox, создавший извещение о событии. После этого вызов метода isSelected
() определяет состояние флажка — установлен или сброшен. Метод getText
() получает текст для данного флажка и использует его для определения текста внутри метки Демонстрация применения JCheckbox.

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


*/
public class JCheckBoxDemo extends JApplet
implements ItemListener {
JLabel jlab;
public void init() {
try {
Глава 31. Дополнительные сведения о библиотеке Swing
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {
m a k eGUI();
}
}
) ;
} catch (Exception exc) {
System.out.println("Can't create because of " +
// Невозможно создать из-за "
}
}
private void mak e G U I () {
// Изменение компоновки потока
setLayout(new FlowLayout());
// Добавление флажков в панель содержимого cb = new С
cb.addltemListener(this);
add(cb);
cb = new JCheckBox("C++");
cb.addltemListener(this);
add(cb);
cb = new JCheckBox("Java");
cb.addltemListener(this);
add(cb);
cb = new JCheckBox("Perl");
cb.addltemListener(this);
add(cb);
// Создание метки и добавление ее в панель содержимого
jlab = new JL a b e l ("Select languages");
// jlab = new J L Выберите языки Обработка событий флажка void itemStateChanged(ItemEvent ie) {
JCheckBox cb = (JCheckBox)ie.getltem();
if(cb.isSelected())
jlab.setText(cb.getText() + " is selected");
// jlab.setText(cb.getText() + " выбран
else
jlab.setText(cb.getText() + " is cleared");
// jlab.setText(cb.getText() + " сброшен) ;
+ На рис. 31.5 показан результат выполнения аплета.

9 8 4 Часть III. Разработка программного обеспечения с использованием Переключатели представляют собой группы взаимоисключающих кнопок, в которых можно выбрать только одну. Они поддерживаются классом
JRadioButton, который расширяет класс
JToggleButton. lOiacc
JRadioButton предлагает несколько конструкторов. Один из них, используемый в примере, показан ниже

строка)
Здесь строка — это метка кнопки. Остальные конструкторы позволяют определить исходное состояние кнопки и задать значок.
Переключатели необходимо объединять в группу, в которой можно выбрать только одну из кнопок. Например, если пользователь выбирает переключатель, находящийся в группе, то выбранный ранее переключатель в этой группе автоматически отключается. Для создания группы кнопок предназначен класс
But tonGroup. Для этой цели вызывается его конструктор, используемый по умолчанию. После этого можно добавить в группу элементы с помощью следующего метода add(AbstractButton Здесь ab представляет ссылку на кнопку, которую необходимо добавить в группу.
Класс
JRadioButton создает извещение о событии действий, события элементов и события изменений каждый раз, когда меняется выбранная кнопка в переключателе. Как правило, обрабатывается событие действия, а это означает, что вы обычно будете реализовать интерфейс
ActionListener. Вы должны помнить, что интерфейс
ActionListener определяет только один метод — actionPerf ormed (). Узнать, какая кнопка была выбрана, в этом методе можно несколькими способами.
Во-первых, можно проверить ее команду действия, вызвав метод getAct ionCom­
mand
(). По умолчанию команда действия — это тоже, что и метка кнопки, однако вы можете задать вместо нее что-нибудь другое, вызвав метод setActionCom­
mand
() для переключателя. Во-вторых, можно вызвать метод get
Source
() в объекте класса
Act ionEvent и проверить ссылку относительно кнопок. Наконец, можно просто проверить каждый переключатель, чтобы узнать, какая кнопка в данный момент была выбрана, вызвав метод isSelected
() для каждой кнопки. Помните, что каждый раз, когда происходит событие действия, оно означает, что выбранная кнопка была изменена и что была выбрана только одна кнопка.
В следующем аплете демонстрируется использование переключателей. В нем создаются и объединяются в группу три переключателя. Как уже было сказано, это нужно для того, чтобы они взаимно исключали друг друга. При выборе переключателя происходит событие действия, которое обрабатывается методом actionPer- f ormed
(). В этом обработчике метод getAct ionCommand
() получает текст, который связан с переключателем, и использует его для определения текста в метке is selected

A pplet Рис. 31.5. Окно аплета Переключатели
Глава 31. Дополнительные сведения о библиотеке Swing
9 8 5
// Демонстрация применения JRadioButton
import j a v a .a w t .*;
import j a v a .a w t .event.*;
import javax.swing.*;
/*


*/
public class JRadioButtonDemo extends JApplet
implements ActionListener {
JLabel jlab;
public void i n i t () {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void r u n () {
make G U I ();
}
}
) ;
} catch (Exception exc) {
System.out.println("Can't create because of " + exc);
// Невозможно создать из-за " + exc);
}
}
private void mak e G U I () {
// Изменение компоновки потока FlowLayout());
// Создание переключателей и добавление их в панель содержимого
JRadioButton bl = new А
b l .addActionListener(this);
add(bl);
JRadioButton b2 = new JRadioButton("B");
b 2 .addActionListener(this);
a d d (b 2 );
JRadioButton b3 = new JRadioButton("C");
b 3 .addActionListener(this);
add(b3);
// Определение группы кнопок bg = new ButtonGroup();
bg.add(bl);
b g .add(b2);
b g .add(b3);
// Создание метки и добавление ее в панель содержимого
jlab = new JL a b e l ("Select One");
// jlab = new J L Выберите один из переключателей Обработка выбора кнопки void actionPerformed(ActionEvent ae) {
jlab.setText("You selected " + a e .getActionCommand());
// Выбран " + a e Результат выполнения этого аплета показан на рис. 31.6.

9 8 6 Часть III. Разработка программного обеспечения с использованием Java
A p p le t V ie w e r: JR a dioB utton D em o
' Г х
Applet
О
A
< D |] ОС В Рис. 31.6. Окно аплета Класс Класс
JTabbedPane определяет панель с вкладками Он управляет набором компонентов, соединяя их с помощью вкладок. При выборе вкладки компонент, связанный с ней, появляется на переднем плане. Панели с вкладками очень популярны в современных пользовательских графических интерфейсах, ивы тоже будете часто их применять в своих программах. Несмотря на сложную природу панели с вкладками, создавать и использовать их очень просто.
Класс
JTabbedPane определяет три конструктора. Мы будем использовать стандартный конструктор, который создает пустой элемент управления с вкладками, расположенными вдоль верхней части панели. Другие два конструктора позволяют определить месторасположение вкладок, которые можно расположить вдоль одной из четырех сторон. Класс
JTabbedPane использует модель Вкладки добавляются при помощи вызова метода addTab ()
. Ниже показана одна из его форм addTab(String имя Component

компаратор)
Здесь имя —
это имя вкладки, а компаратор — это компонент, который должна содержать вкладка. Обычно добавляется компонент
JPanel, содержащий группу связанных между собой компонентов. Эта технология позволяет вкладке содержать набор компонентов.
Общая процедура использования панели с вкладками выглядит следующим образом. Создается объект класса
JTabbedPane.
2. Для добавления каждой вкладки нужно вызвать метод addTab
( )
3. Панель с вкладками переносится в панель содержимого.
В следующем примере показан процесс создания панели с вкладками. Первая вкладка имеет заголовок C ities (Города) и содержит четыре кнопки. Каждая кнопка отображает название города. Вторая вкладка имеет заголовок C o lors (Цвета) и содержит три флажка. Каждый флажок отображает название цвета. Третья вкладка имеет заголовок F lavors (Привкусы) и содержит один комбинированный список. Сего помощью пользователь может выбрать один из трех привкусов.
// Демонстрация применения JTabbedPane.
import javax.swing.*;
/*


Глава 31. Дополнительные сведения о библиотеке Swing
9 8 7
*/
public class JTabbedPaneDemo extends JApplet {
public void init() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() {
m a k eGUI();
}
}
) ;
} catch (Exception exc) {
System.out.println("Can't create because of " + exc);
// Невозможно создать из-за " +
e x c ) ;
}
private void makeGUI() {
JTabbedPane jtp = new JTabbedPane();
jt p .addTab("Cities", new CitiesPanel());
j t p .addTab("Colors", new ColorsPanel());
j t p .addTab("Flavors", new FlavorsPanel());
add(jtp);
}
}
// Создаем панели, которые будут добавляться в панель с вкладками
class CitiesPanel extends JPanel {
public CitiesPanel() {
= new JButton("New York");
= new JButton("London");
JButton bl
add(bl)
JButton b2
add(b2)
JButton b3
add(b3)
JButton b4
add(b4)
= new JButton(
= new JButton(
'Hong Kong")
'
Tokyo");
class ColorsPanel extends JPanel {
public ColorsPanel() {
JCheckBox cbl = new JCheckBox("Red");
a d d (cbl);
JCheckBox cb2 = new JCheckBox("Green");
a d d (cb 2 );
JCheckBox cb3 = new JCheckBox("Blue");
add(cb3);
}
}
class FlavorsPanel extends JPanel {
public FlavorsPanel() {
JComboBox jcb = new JComboBox();
jcb.addltem("Vanilla");
jcb.addltem("Chocolate")
;
jcb.addltem("Strawberry");
add(jcb);
}
}

9 8 8 Часть III. Разработка программного обеспечения с использованием На рис. 31.7 показаны окна этого аплета.
Ц Applet View er: JTabbedPaneDem o
111®
4
- □ X
Applet
f Cities / Colors ' Flavors
New York
London
Hong Kong.
TtMtyo
Applet started
Applet View er: JTabbedPaneDem o
- га И |Green| □ Blue

Applet started.
Applet View er: JTabbedPaneDem o
Applet
Cities Г
Colors Г
Flavors
Applet Рис. 31.7. Окна аплета Класс Класс
JScrollPane
— это облегченный контейнер, который автоматически обрабатывает прокрутку другого компонента. Прокручиваемым компонентом может быть как отдельный компонент (например, таблица, таки группа компонентов, содержащихся внутри другого облегченного контейнера, такого как
JPanel. В любом случае, если прокручиваемый объект больше области просмотра, к нему
Глава 31. Дополнительные сведения о библиотеке Swing
9 8 автоматически добавляется горизонтальная и или вертикальная полоса прокрутки, что позволяет прокручивать компонент в рамках панели. Поскольку класс
JScrollPane автоматизирует процесс прокрутки, он обычно исключает необходимость в управлении отдельными полосами прокрутки.
Просматриваемая область панели с полосами прокрутки называется окном просмотра Это — окно, в котором отображается прокручиваемый компонент. Таким образом, окно просмотра показывает видимую часть прокручиваемого компонента. Полосы прокрутки прокручивают компонент в области просмотра. По умолчанию класс
JScrollPane динамически добавляет или удаляет полосу прокрутки по мере необходимости. Например, если компонент выше окна просмотра, добавляется вертикальная полоса прокрутки. Если компонент полностью умещается в окне просмотра, полосы прокрутки удаляются.
Класс
JScrollPane определяет несколько конструкторов. Конструктор, используемый в этой главе, выглядит так
компаратор)
Прокручиваемый компонент задается с помощью параметра компаратор Полосы прокрутки автоматически отображаются, если содержимое панели превышает размеры окна просмотра.
Чтобы использовать панель с полосами прокрутки, нужно выполнить следующие действия. Создать компонент, который будет прокручиваться. Создать экземпляр класса
JScrollPane, передавая ему объект прокрутки. Добавить панели с полосами прокрутки в панель содержимого.
На примере следующего аплета демонстрируется применение панели с полосами прокрутки. Сначала в нем создается объект
JPanel, после чего в этот объект добавляется 400 кнопок, сгруппированных в 20 столбцов. Затем эта панель добавляется в панель с полосами прокрутки, а последняя добавляется в панель содержимого. Поскольку панель больше окна просмотра, то автоматически появляются вертикальная и горизонтальная полосы прокрутки. Полосы прокрутки можно использовать для прокрутки кнопок в данном представлении Демонстрация применения JScrollPane.

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


*/
public class JScrollPaneDemo extends JApplet {
public void ini t () {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void r u n () {
m a keGUI();
}
}
) ;
} catch (Exception exc) {
System, o u t .println ("Can '
t create because of " + exc) ;
// Невозможно создать из-за " +
e x c ) ;
}
}

9 9 0 Часть III. Разработка программного обеспечения с использованием Java
private void mak e G U I () {
// Добавление 40 0 кнопок в панель jp = new JPan e l ();
j p .setLayout(new GridLayout(20;
20));
int b = 0;
for(int i = 0; i < 20; i++) {
for(int j = 0; j < 20; j++) {
jp.add(new JButton("Button " + b ) );
+
+b;
}
}
// Создание панели с прокруткой jsp = new JScrollPane(jp);
// Добавление панели с прокруткой в панель содержимого
// Так как используется компоновка границ по умолчанию
// панель с полосами прокрутки добавляется в центр
a d d (j s p ,
На рис. 31.8 показан результат выполнения этого аплета.
В A p plet V iew er: JScrollPaneDem o | -
1   ...   82   83   84   85   86   87   88   89   90


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