Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИиП.pdf
Скачиваний:
747
Добавлен:
11.05.2015
Размер:
13.6 Mб
Скачать

158

Рисунок 80 - Вкладка Colors окнаапплета JTabbedPaneDemo

Рисунок 81 - Вкладка Flavors окнаапплета JTabbedPaneDemo

9.5.10Панели прокрутки

Панель прокрутки (scroll pane) — компонент, который представляет прямоугольную область, в которой компонент может быть просмотрен. В случае необходимости в панель можно добавить горизонтальную и/или вертикальную полосы прокрутки. Панели прокрутки реализованы в Swing классом JScrollPane, который расширяет JComponent. Вот некоторые из его конструкторов:

JScrollPane(Component camp)

JScroiiPane(int vsb, int hsb)

JScrollPane(Component camp, int vsb, int hsb)

Здесь comp — компонент, который будет добавлен в панель прокрутки; vsb и hsb int- константы, которые определяются; когда нужно показывать вертикальные и горизонтальные полосы прокрутки в панели прокрутки. Эти константы определены интерфейсом ScrollPaneConstants. Некоторые примеры этих констант описаны в табл. 8.

Таблица 8 - Константы интерфейса ScrollPaneConstants

Класс

Описание

horizontal_scrollbar_always

Всегда обеспечивает горизонтальную полосу

 

прокрутки

horizontal_scrollbar_as_needed

Обеспечивает горизонтальную полосу прокрутки, если

 

необходимо

vertical_scrollbar_always

Всегда обеспечивает вертикальную полосу

 

159

 

прокрутки

vertical_scrollbar_AS_needed

Обеспечивает вертикальную полосу прокрутки, если

 

необходимо

Для алгоритма создания апплета с панелью прокрутки необходимо:

1.Создать Объект JComponent.

2.Создать объект JScrollPane. (Аргументы конструктора определяют компонент и установку вертикальных и горизонтальных полос прокрутки.)

3.Добавить панель прокрутки в панель содержания апплета.

Следующий пример иллюстрирует панель прокрутки. Сначала получена панель содержания объекта jApplet, и в качестве ее менеджера компоновки назначено граничное размещение. Потом создан объект JPanel, и к нему добавлены четыре сотни кнопок, размещенных в двадцати столбцах. Затем создается панель прокрутки и добавляется в панель содержания. Это приводит к появлению вертикальной и горизонтальной полос прокрутки, которые вы можете использовать для листания набора кнопок в этом представлении.

import java.awt.*; import javax.swing.*; /*

<applet code="JScrollPaneDemo" width=300 height=250> </applet>

*/

public class JScrollPaneDemo extends JAppiet {

public void init () {

// получить панель содержания Container contentPane = getContentPane();

contentPane.setLayout(new BorderLayout());

// добавить в панель 400 кнопок . JPanel jp = new JPanelO; jp.setLayout(new GridLayout(20, 20)}; int b = 0;

for(int i = 0; i < 20; i++) { for(int j = 0; j < 20; j++) {

jp.addjnew JButton("Button " + b)); ++b;

}

}

// создать панель прокрутки с полосами прокрутки

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; J ScrollPane jsp = new JScrollPane(jp, v, h);

// добавить панель прокрутки в центр панели содержания content Pane, add (jsp, Border-Layout .CENTER) ;

160

}

}

Вывод этого апплета представлен на рис. 75.

Рисунок 82 - Окно апплета JScrollPaneDemo

9.5.11Деревья

Дерево (tree) — компонент, который представляет иерархический вид данных. Пользователь имеет возможность развернуть или свернуть индивидуальные поддеревья в этом показе. Деревья реализованы в Swing классом JTree, который расширяет JComponent. Вот некоторые из его конструкторов:

JTree (Hashtable ht)

JTree(Object abj[ ])

JTree(TreeNode tn)

JTree (Vector v)

Первая форма создает дерево, в котором дочерней вершиной является каждый элемент хэш-таблицы ht. Во второй форме дочерней вершиной является каждый элемент массива obj. В третьей форме параметр tn указывает корневой узел дерева. Наконец, последняя форма использует элементы векторного параметра v как дочерние вершины.

Когда узел разворачивается или сворачивается, объект JTree генерирует события. Методы AddTreeExpansionListener() и removeTreeExpansionListener() позволяют блокам прослушивания регистрировать или отменять регистрацию для этих уведомлений. Сигнатуры этих методов:

void addTreeExpansionListener(TreeExpansionListener tel) void removeTreeExpansionListener (TreeExpansionListener tel)

Здесь tel — объект блока прослушивания.

161

Чтобы транслировать щелчок мыши на определенной точке дерева в ветвь (путь) дерева используется метод GetPathForLocation (). Его сигнатура:

TreePath getPathForLocation(int х, int у)

Здесь х и у — координаты указателя мыши, где выполнен щелчок. Возвращаемое значение — объект TreePath, который инкапсулирует информацию относительно узла дерева, выбранного пользователем.

Класс TreePath инкапсулирует информацию о пути к специфическому узлу дерева. Он обеспечивает несколько конструкторов и методов. В этой книге используется только метод toString (). Он возвращает строковый эквивалент пути дерева.

Интерфейс TreeNode объявляет методы, которые получают информацию относительно узла дерева. Например, возможно получить ссылку к родительскому узлу или перечислению дочерних узлов. Интерфейс MutabieTreeNode расширяет TreeNode. Он объявляет методы, которые могут вставлять и удалять дочерние узлы или изменять родительский узел.

Класс DefaultMutableTreeNode реализует интерфейс MutabieTreeNode. Он представляет узел в дереве. Ниже показан один из его конструкторов:

DefaultMutableTreeNode(Object obj)

Здесь obj — объект, который будет включен в этот узел дерева. Новый узел дерева не имеет родительского или дочернего узла.

Чтобы создавать иерархию узлов дерева, можно использовать метод add () класса

DefaultMutableTreeNode. Его сигнатура:

void add(MutabieTreeNode child)

Здесь child — изменяемый узел дерева, который должен быть добавлен как дочерний к текущему узлу.

События расширения дерева (tree expansion events) описаны классом

TreeExpansionEvent в пакете javax.swing.event. Метод getPath () этого класса возвращает объект TreePath, который описывает путь к измененному узлу. Его сигнатура:

TreePath getPath ()

Интерфейс TreeExpansionListener обеспечивает следующие два метода:

void treeCollapsed(TreeExpansionEvent tee) void (TreeExpansionEvent tee)

Здесь tee — событие расширения дерева. Первый метод вызывается, когда поддерево сворачивается, а второй — когда поддерево становится видимым (разворачивается).

Шаги алгоритма создания апплета с деревом таковы:

1.Создать Объект Jtree.

2.Создать объект JScrollPane. (Аргументы конструктора определяют дерево и установку вертикальных и горизонтальных полос прокрутки.)

162

3.Добавить дерево к панели прокрутки.

4.Добавить панель прокрутки к панели содержания апплета.

Следующий пример иллюстрирует, как можно создавать дерево и распознавать щелчки мыши на нем.

import j ava.awt.*; import j ava.awt.event.*; import j avax.swing.*; import javax.swing.tree.*; /*

<applet code="JTreeEvents" width=400 height=200> </applet>

*/

public class JTreeEvents extends JApplet { JTree tree;

JTextField jtf;

public void init () {

//получить панель содержания Container contentPane = getContentPane();

//установить менеджер компоновки contentPane.setLayout(new BorderLayout());

//создать корневой узел дерева

DefaultMutableTreeNode top = new DefaultMutableTreeNode("Options");

II создать поддерево "А"

DefaultMutableTreeNode а = new DefaultMutableTreeNode("A"); top.add(a);

DefaultMutableTreeNode al = new DefaultMutableTreeNode ("Al"); a.add(al) ;

DefaultMutableTreeNode a2 = new DefaultMutableTreeNode ("A2"); a.add(a2);

II создать поддерево "В"

DefaultMutableTreeNode b = new DefaultMutableTreeNode (“B”); top.add(b);

DefaultMutableTreeNode bl = new DefaultMutableTreeNode (“B1”); b.add(b1);

DefaultMutableTreeNode b2 = new DefaultMutableTreeNode (“B2”); b.add(b2) ;

DefaultMutableTreeNode b3 = new DefaultMutableTreeNode (“B3”); b.add(b3);

//создать дерево tree = new Jtree(top);

//добавить дерево в панель прокрутки

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;

163

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp = new JScrollPane(tree, v, h);

II добавить панель прокрутки в панель содержания contentPane.add(jsp, BorderLayout.CENTER);

//добавить текстовое поле к апплету jtf = new JTextFieldC", 20);

contentPane.add(jtf, BorderLayout.SOUTH);

//анонимный внутренний класс для обработки щелчков мыши tree.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent me) { doMouseClicked(me);

}

}};

}

void doMouseClicked(MouseEvent me) {

TreePath tp = tree.getPathForLocation(me.getX(), me.getYO); if(tp != null)

jtf.setText(tp.toString () ); else

jtf.setText ('");

}

}

Метод init () получает панель содержания для апплета. Затем создается объект DefaultMutabieTreeNode, маркированный как Options (Параметры). Это — корневой узел иерархии дерева. Далее создаются дополнительные узлы дерева, и вызывается метод add (), чтобы подключить эти узлы к дереву. В качестве аргумента конструктора JTree используется ссылка к корневому узлу дерева. Затем дерево пересылается как аргумент конструктору JSscrollPane. Потом эта панель прокрутки добавляется к апплету. После чего создается и добавляется к апплету текстовое поле. В нем представлена информация относительно событий щелчка мыши. Чтобы принимать события мыши от дерева, вызывается метод addMouseListener () объекта JTree. Аргумент этого метода — анонимный внутренний класс, который расширяет

MouseAdapter и переопределяет метод mouseClicked ().

Метод doMouseClicked () обрабатывает щелчки мыши. Он вызывает метод getPathForLocation (), чтобы транслировать координаты щелчка мыши в объект TreePath. Если кнопка мыши нажата в точке, которая не вызывает выбор узла, возвращаемое значение этого метода — null. В противном случае, путь дерева может быть конвертирован в строку и представлен в текстовом поле.

Вывод этого апплета представлен на рис. 76.

Строка, представленная в текстовом поле, описывает путь от вершины дерева к выбранному узлу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]