Глава 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.
Области у границ окна узкие, поэтому в них может быть размещен только один компонент:
setBackground(Color.cyan);
Panel m = new Panel();
for (int i = 0; i < message.length; i++)
Panel p = new Panel();
rebootButton = new Button("Reboot");
}
ряд кнопок, заголовок или полоса прокрутки. Вот как может выглядеть конструктор, эквивалентный приведенному в примере 10.4
setForeground(Color.black);
add(new Label(message[i]));
add("Center", m);
// по умолчанию используется менеджер Flowlayout
waitButton = new Button("Wait");
waitButton.addActionListener(this);
add(waitButton);
rebootButton.addActionListener(this);
add(rebootButton);
add.("South", p);
//другие операторы, относящиеся ко фрейму
Рис 10.10 Названия областей для менеджера размещения BorderLayout
Вверх
Пример 10.5 Светофор
Задача
Управление безопасности движения Саванны распорядилось создать симулятор светофора и проследить, как нажатие пешеходами кнопок на переходе воздействует на изменение цветов
Решение
Необходимо создать и вывести на экран окно, как на рис 10.11.
Рис 10.11 Окно программы эмуляции светофора
Затем должен быть разработан алгоритм изменения цветов светофора, в результате нажатия кнопки. В процессе программирования мы будем использовать события. Следует отметить так же. что разработка настоящей программы будет продолжена в главе 11.1
Конструирование класса
Поместите изображение светофора на холст, используя методы класса Graphics. Кнопки должны находиться на одной панели, а заголовок - на другой.
В этой программе кнопка Закрыть связана с соответствующим слушателем, а для кнопки Идите еще не задано действие. Это будет сделано в следующей главе.
Программа
class Traffic0 extends Frame implements ActionListener
{
/* The first Traffic light program
* by J M Bishop Oct 1996
LightsCanvas lights;
Traffic0()
{
lights = new LightsCanvas();
Panel buttons = new Panel();
// Set up the frame
public void actionPerformed(ActionEvent e)
{
public static void main(String[] args)
{
class LightsCanvas extends Canvas
{
Тестирование
Рис 10.13 Окно программы эмуляции светофора
Назад |
Начало урока |
Вверх |
Вперед
import java.awt.*;
import java.awt.event.*;
* 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.
*/
Button close;
Button walk;
Panel title = new Panel();
add("Center", lights);
buttons.add(walk);
close = new Button("CLOSE");
close.addActionListener(this);
buttons.add(close);
setTitle("Traffic Lights version 0");
setSize(300,200);
setVisible(true);
addWindowListener(new WindowAdapter ()
{
setVisible(false);
dispose();
System.exit(0);
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);
Содержание