Назад | Начало урока | Вперед
Содержание

Глава 10 (продолжение )

Другие менеджеры размещения

Характеристики других компонентов

Метки и кнопки - это компоненты. Мы упоминали, что существуют и другие подобные классы. Ниже дан их обзор.

Класс TextComponent вместе с двумя подклассами TextArea и TextField позволяет работать
с текстом, состоящим из большого количества строк, выделять текст и редактировать его.

Класс Scrollbar
Класс ScrollPane
Класс Canvas
Класс CheckBox
Класс Choise
Класс Menus
Класс PopupMenu
Класс Print

Панели для группирования

Java предоставляет средства для группирования компонентов в окне, которые можно будет перемещать совместно без риска, что один из них перекроет другой. Примером является панель инструментов. Панель передается менеджеру размещения как один элемент. Так кнопки Запустить и Очистить могут быть сгруппированы следующим образом:

Panel p = new Panel();
p.add(new Button ("Запустить"));
p.add(new Button ("Очистить"));
add(p);

(Обратите внимание на то, как в коде используются отступы перед операторами.)
затем панель может быть добавлена в конструктор фрейма. Если требуется, чтобы кнопки всегда располагались в нижней части экрана, следует воспользоваться менеджером размещения BorderLayout и поместить панель в область South. Менеджером размещения BorderLayout по умолчанию назначен для фреймов, а FlowLayout - для панелей. Поэтому их не нужно будет вызывать до тех пор, пока не потребуется изменить , например расстояние между компонентами. При добавлении компонента с использованием менеджера размещения BorderLayout в качестве первого параметра указывается одна из пяти областей(строковых констант), показанных на рис 10.10.

Области у границ окна узкие, поэтому в них может быть размещен только один компонент:
ряд кнопок, заголовок или полоса прокрутки. Вот как может выглядеть конструктор, эквивалентный приведенному в примере 10.4

setBackground(Color.cyan);
setForeground(Color.black);

Panel m = new Panel();

for (int i = 0; i < message.length; i++)
add(new Label(message[i]));
add("Center", m);

Panel p = new Panel();
// по умолчанию используется менеджер Flowlayout
waitButton = new Button("Wait");
waitButton.addActionListener(this);
add(waitButton);

rebootButton = new Button("Reboot");
rebootButton.addActionListener(this);
add(rebootButton);
add.("South", p);
//другие операторы, относящиеся ко фрейму

}

Рис 10.10 Названия областей для менеджера размещения BorderLayout

Вверх

Пример 10.5 Светофор

Задача Управление безопасности движения Саванны распорядилось создать симулятор светофора и проследить, как нажатие пешеходами кнопок на переходе воздействует на изменение цветов

Решение Необходимо создать и вывести на экран окно, как на рис 10.11.

Подсказка

Рис 10.11 Окно программы эмуляции светофора

Затем должен быть разработан алгоритм изменения цветов светофора, в результате нажатия кнопки. В процессе программирования мы будем использовать события. Следует отметить так же. что разработка настоящей программы будет продолжена в главе 11.1

Конструирование класса Поместите изображение светофора на холст, используя методы класса Graphics. Кнопки должны находиться на одной панели, а заголовок - на другой.

В этой программе кнопка Закрыть связана с соответствующим слушателем, а для кнопки Идите еще не задано действие. Это будет сделано в следующей главе.

Программа


import java.awt.*;
import java.awt.event.*;

class Traffic0 extends Frame implements ActionListener {

/* The first Traffic light program * by J M Bishop Oct 1996
* Java 1.1 by T Abbott October 1997
* updated J M Bishop May 2000
* Displays a representation of traffic lights,
* in preparation for a simulation.
*
* NOTE: The walk button is not activated yet.
* Illustrates panels and canvases and the
* BorderLayout manager.
*/

LightsCanvas lights;
Button close;
Button walk;

Traffic0() {

// Add the components
Panel title = new Panel();
title.add (new Label("Savanna Traffic Light Simulation"));
add("North", title);

lights = new LightsCanvas();
add("Center", lights);

Panel buttons = new Panel();

walk = new Button("WALK");
buttons.add(walk);
close = new Button("CLOSE");
close.addActionListener(this);
buttons.add(close);
add("South", buttons);

// Set up the frame
setTitle("Traffic Lights version 0");
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter () {

public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

}

public void actionPerformed(ActionEvent e) {

// Must be the close button
setVisible(false);
dispose();
System.exit(0);
}

public static void main(String[] args) {

new Traffic0 ();
}

class LightsCanvas extends Canvas {

public void paint(Graphics g) {
g.drawOval(97, 10, 30, 68);
g.setColor(Color.red);
g.fillOval(105, 15, 15, 15); // red
g.setColor(Color.yellow);
g.fillOval(105, 35, 15, 15); // yellow
g.setColor(Color.green);
g.fillOval(105, 55, 15, 15); // green
g.fillOval(105, 85, 15, 15); // walk
g.setColor(Color.black);
g.drawString("RED", 15, 28);
g.drawString("YELLOW", 15, 48);
g.drawString("GREEN", 15, 68);
g.drawString("WALK", 15, 98);
}
}
}


Тестирование

Подсказка

Рис 10.13 Окно программы эмуляции светофора


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz