Чтение онлайн

на главную - закладки

Жанры

Основы программирования на Java

Сухов С. А.

Шрифт:

import java.awt.*;

import java.applet.*;

public class ScrollbarDemo extends Applet {

public void init {

setLayout(null);

int width = Integer.parseInt(getParameter(“width”));

int height = Integer. parseInt(getParameter(“height"));

Scrollbar hs = new Scrollbar(Scrollbar.HORIZONTAL, 50, width / 10, 0,100);

Scrollbar vs = new Scrollbar(Scrollbar.VERTICAL, 50, height / 2,0,100);

add(hs);

add(vs);

int thickness =16;

hs.reshape(0, height - thickness, width - thickness, thickness);

vs.reshape(width - thickness, 0, thickness, height - thickness);

}

}

12.11. Класс TextField

Класс TextField представляет собой реализацию однострочной области для ввода текста. Такие области часто используются в формах для пользовательского ввода. Вы можете «заморозить» содержимое объекта TextField с помощью метода setEditable, а метод isEditable сообщит вам, можно ли редактировать текст в данном объекте. Текущее значение объекта можно получить методом getText и установить методом setText. С помощью метода select можно выбрать фрагмент строки, задавая его начало и конец, отсчитываемые с нуля. Для выбора всей строки используется метод selectAll.

Метод setEchoChar задает символ, который будет выводиться вместо любых вводимых символов. Вы можете проверить, находится ли объект TextField в этом режиме, с помощью метода echoCharlsSet и узнать, какой именно символ задан для эхо-печати, с помощью метода getEchoChar. Вот пример, в котором создаются классические поля для имени пользователя и пароля.

import java.awt.*;

import java.applet.*;

public class TextFieldDemo extends Applet {

public void init {

setLayout(null);

int width = Integer.parseInt(getParameter("width"));

int height = Integer.parseInt(getParameter(“height"));

Label namep = new Label("Name : ", Label.RIGHT);

Label passp = new Label("Password :”, Label.RIGHT);

TextField name = new Text Field(8);

TextField pass = new TextField(8);

pass.setEchoChar('*');

add(namep);

add(name);

add(passp);

add(pass);

int space = 25;

int wl = width / 3;

namep.setBounds(0, (height - space) / 2, wl, space);

name.setBounds(wl, (height - space) / 2, wl, space);

passp.setBounds(0, (height + space) / 2, wl, space);

pass.setBounds(wl, (height + space) / 2, wl, space);

}

}

12.12. Класс TextArea

Порой одной строки текста оказывается недостаточно для конкретной задачи. AWT включает в себя очень простой многострочный редактор обычного текста, называемый TextArea. Конструктор класса TextArea воспринимает значение типа String в качестве начального текста объекта. Кроме того, в конструкторе указывается число колонок и строк текста, которые нужно выводить. Есть три метода, которые позволяют программе модифицировать содержимое объекта TextArea: appendText добавляет параметр типа String в конец буфера; insertText вставляет строку в заданное отсчитываемым от нуля индексом место в буфере; replaceText копирует строку-параметр в буфер, замещая ею текст, хранящийся в буфере между первым и вторым параметрами-смещениями. Ниже приведена программа, создающая объект TextArea и вставляющая в него строку.

import java.awt.*;

import java.applet.*;

public class TextAreaDemo extends Applet {

public void init {

setLayout(null);

int width = Integer.parseInt(getParameter(“width"));

int height = Integer.parseInt(getParameter("height"));

String val = "Хочешь быть великим - " + "стань им.\n" +

"Только в начале\n" + "победи сам себя\n" +

в первую очередь\n" + "свою лень.\n\n";

TextArea text = new TextArea(val, 80,40); add(text);

text.setBounds(0,0, width, height);

}

}

12.13. Стратегии размещения компонентов

Все компоненты, с которыми мы работали до сих пор в этой главе, размещались «вручную». И в каждом примере мы вызывали загадочный метод setLayout(null). Этот вызов запрещал использование предусмотренного по умолчанию механизма управления размещением компонентов. Для решения подобных задач в AWT предусмотрены диспетчеры размещения (layout managers).

12.13.1. Диспетчер размещения LayoutManager

Каждый класс, реализующий интерфейс LayoutManager, следит за списком компонентов, которые хранятся с именами типа String. Всякий раз, когда вы добавляете компонент в Panel, диспетчер размещения уведомляется об этом. Если требуется изменить размер объекта Panel, то идет обращение к диспетчеру посредством методов minimumLayoutSize и preferredLayoutSize. В каждом компоненте, который приходится обрабатывать диспетчеру, должны присутствовать реализации методов preferredSize и minimumSize. Эти методы должны возвращать предпочтительный и минимальный размеры для прорисовки компонента, соответственно. Диспетчер размещения по возможности будет пытаться удовлетворить эти запросы, в то же время заботясь о целостности всей картины взаимного расположения компонентов.

В Java есть несколько предопределенных классов — диспетчеров размещения, описываемых ниже.

12.13.2. Стратегия FIowLayout

Класс FIowLayout реализует простой стиль размещения, при котором компоненты располагаются, начиная с левого верхнего угла, слева направо и сверху вниз. Если в данную строку не помещается очередной компонент, он располагается в левой позиции новой строки. Справа, слева, сверху и снизу компоненты отделяются друг от друга небольшими промежутками. Ширину этого промежутка можно задать в конструкторе FIowLayout. Каждая строка с компонентами выравнивается по левому или правому краю, либо центрируется в зависимости от того, какая из констант LEFT, RIGHT или CENTER была передана конструктору. Режим выравнивания по умолчанию — CENTER, используемая по умолчанию ширина промежутка — 5 пикселей. Ниже приведен пример, в котором в Panel включается несколько компонентов Label. Объект Panel использует FIowLayout с выравниванием RIGHT.

Поделиться:
Популярные книги

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Как я строил магическую империю 3

Зубов Константин
3. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 3

Сильнейший Столп Империи. Книга 3

Ермоленков Алексей
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 3

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Искатель 3

Шиленко Сергей
3. Валинор
Фантастика:
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Искатель 3

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Двойник Короля 4

Скабер Артемий
4. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 4

Двойник короля 21

Скабер Артемий
21. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 21

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Противостояние

Гаевский Михаил
2. Стратег
Фантастика:
боевая фантастика
космическая фантастика
5.25
рейтинг книги
Противостояние

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II