Количество часов: 4 часа.
Рейтинг: 2 балла.
Теперь рассмотрим ключевые моменты в использовании классов каждого компонента в отдельности. Отметим, что здесь не приводятся способы обработки сообщений от компонентов, поскольку этим мы будем заниматься в наших практических занятиях.
Label first = new Label(); Label second = new Label("Some text"); Label third = new Label("Some text", Label.CENTER);Вы можете узнать о текущем тексте и его выравнивании, вызвав методы getText() и getAlignment() соответственно.
Label first = new Label(); Label second = new Label("Some text"); Label third = new Label("Some text", Label.CENTER);В любой момент можно создать или изменить надпись на кнопке, вызвав метод setLabel() и передав ему в качестве аргумента строку, которая будет написана на кнопке, а вызывая методы disable() и enable(), кнопку можно отключать (т.е. запрещать обработку нажатий) и включать.
Ниже приведены фрагменты, иллюстрирующие создание как независимых кнопок, так и кнопок с независимой фиксацией:
// Создать две независимые отмечаемые // кнопки Checkbox first, second; first = new Checkbox("First checkbox"); first.setState(true); // Включить кнопку second = new Checkbox("Second checkbox"); ... // Создать две связанные радиокнопки Checkbox first, second; CheckboxGroup group = new CheckboxGroup(); first = new Checkbox //true - кнопка включена ("First radiobutton", group, true); second = new Checkbox //false - кнопка выключена ("Second radiobutton", group, false;Когда потребуется программно установить активную кнопку, можно вызвать метод setCurrent(). Для определения активной в настоящий момент кнопки, вызывайте метод getCurrent().
Choice choice = new Choice(); choice.addItem("First"); choice.addItem("Second"); choice.addItem("Third");Полезные методы класса Choice:
Создание объекта класса List может происходить двумя способами. Вы можете создать пустой список и добавлять в него пункты, вызывая метод addItem. При этом размер списка будет расти при добавлении пунктов. Другой способ позволяет сразу ограничить количество видимых в окне списка пунктов. Остальные пункты выбора можно увидеть, прокрутив список. Вот пример для обоих способов:
// Создание списка без ограничения // размера List list1 = new List(); list.addItem("First"); list.addItem("Second"); list.addItem("Third"); list.addItem("Forth"); // Создание списка, ограниченного // размером в два пункта выбора List list2 = new List(2,true); list.addItem("First"); list.addItem("Second"); list.addItem("Third"); list.addItem("Forth");Полезные методы класса List:
// Создать полосу прокрутки // с параметрами по умолчанию new Scrollbar(); // Создать полосу прокрутки // с ориентацией,в данном случае - // вертикальной new Scrollbar(Scrollbar.VERTICAL);Третий конструктор создает объект класса Scrollbar, сразу задавая все необходимые параметры:
new Scrollbar ( <ориентация>, <текущее значение>, <видно>, <мин. значение>, <макс. значение>);где
<ориентация> - ориентация полосы, задаваемая константами Scrollbar.HORIZONTAL и Scrollbar.VERTICAL;
<текущее значение> -начальное значение, в которое помещается движок полосы прокрутки;
<видно> - сколько пикселов прокручиваемой области видно, и насколько эта область будет прокручена при щелчке мышью на полосе прокрутки;
<мин. значение> - минимальная координата полосы прокрутки;
<макс. значение> - максимальная координата полосы прокрутки.
Обычно в качестве прокручиваемой области выступает объект класса Canvas или порожденный от него объект. При создании такого класса его конструктору необходимо передать ссылки на полосы прокрутки.
TextField tf = new TextField(50); TextArea ta = new TextArea(5, 30);Можно запретить редактировние текста в окне:
tf.setEditable(false); ta.setEditable(false);Полезные методы классов TextField и TextArea:
В свою очередь, класс TextField имеет дополнительные методы:
Для класса TextArea добавляются другие методы:
Создание объекта класса Panel элементарно:
Panel p1 = new Panel();Как и в случае с другими контейнерами, элементы интерфейса могут быть добавлены методом add().
public class NewWindow extends Frame { TextArea output; public NewWindow (String title) { super(title); } ... public static void main (String args[]) { // Создание экземпляра нового класса NewWindow win = new NewWindow("New Window Class"); // Показать его на экране win.show(); } }Полезные методы класса Frame:
class NewDialog extends Dialog
class NewDialog extends Dialog { ... NewDialog(Frame frame, String title) { super(dw, title, false); } ... }Поскольку диалоговые панели могут быть модальными (блокирующими работу с другими окнами) и немодальными, в конструкторах класса Dialog последний параметр определяет модальность. Если он равен true, то диалоговое окно создается модальным, в противном случае оно позволяет переключиться на другое окно приложения.
Помимо общих для всех окон методов getTitle(), setTitle(), isResizable() и setResizable() у класса Dialog имеется метод isModal(), возвращающий true, если диалоговая панель модальна.
Количество часов: 4 часа.
Рейтинг: 2 балла.
Едва ли какое-то современное приложение сможет обойтись без полосы меню в окне. Поэтому в языке Java имеются сразу несколько классов для создания меню, унаследованных от класса MenuComponent. Первый из них, MenuBar, это основной класс всей системы меню, служащий контейнером для других классов. Когда вы создаете окно, то в качестве ссылки на добавляемое меню нужно передать ссылку на класс MenuBar.
Следующий класс Menu на полосе меню отображается как пункт выбора, который, если по нему щелкнуть, раскрывается в виде странички с пунктами выбора (pop-up menu). Сами же элемены выбора меню обычно реализуются как экземпляры классов MenuItem (простой элемент выбора) и CheckboxMenuItem (отмечаемый элемент выбора). Взгляните на пример создания полнофункциональной полосы меню:
// Добавление полосы меню в окно класса Frame public class NewWindow extends Frame { public NewWindow() { // Создаем полосу меню MenuBar menuBar = new MenuBar(); // Создаем первое меню // Второй аргумент true говорит // о том, что меню отрываемое. // Эта опция пока не работает // в Windows Menu menu1 = new Menu("Menu 1", true); menuBar.add(menu1); // Создать и добавить первый пункт // первого меню // Это обычный элемент меню MenuItem item1_1 = new MenuItem("Item #1"); menu1.add(item1_1); // Создать и добавить второй пункт // первого меню // Это отмечаемый элемент меню CheckboxMenuItem item1_2 = CheckboxMenuItem("Item #2"); menu1.add(item1_2); // Создать и добавить второе меню Menu menu2 = new Menu("Menu 2"); menuBar.add(menu2); // Создать и добавить меню // следующего уровня Menu nextLevel = New Menu("Next Level Menu"); menu2.add(nextLevel); } ... }Как видите, создание меню хотя и муторный, но вовсе не сложный процесс. Если вы обратили внимание, то во второе меню добавляется не пункт выбора класса MenuItem, а меню класса Menu. Это приводит к тому, что при нажатии на пункт 2 полосы меню рядом появляется следующее меню, выбрав из которого Next Level Menu получили очередное меню. Таким способом в Java реализовано каскадирование меню.
Создание любого наследника от Canvas сводится к реализации методов paint() для прорисовки изображения и текста на рабочей поверхности и методов minimumSize() и preferredSize(), управляющих ее размерами.
// Установить расположение элементов // вдоль рамки окна setLayout( new BorderLayout() );Дадим краткую характеристику классам-раскладкам.
FlowLayout. Это простейший способ расположения элементов один за другим, применяемый по умолчанию. Когда в одной строке уже не помещаются новые элементы, заполнение продолжается с новой строки.
CardLayout. При раскладке этого типа элементы размещаются один за другим, как карты в колоде. Обычно такой расклад удобен, если вам необходимо динамически изменять интерфейс окна. Кроме того, вы можете делать элементы, находящиеся один над другим по очереди.
BorderLayout. Эта раскладка размещает элементы либо рядом с выбранным краем окна, либо в центре. Для этого после установки BorderLayout добавление элементов в окно-контейнер производится методом add() с дополнительным параметром, задаваемым строками North, South, East, West и Center. Каждая из них означает тот край окна, к которому необходимо прижать вставляемый элемент.
GridLayout. GridLayout располагает элементы один за другим внутри некоторой условной таблицы. Все элементы будут одинакового размера. Размер ячеек можно программно изменять.
GridBagLayout. Это самая мудреная, но в то же время и самая мощная раскладка. Она располагает элементы в условной таблице, как это делается в случае с GridLayout. Но в отличие от последней, можно варьировать размер каждого элемента в отдельности. Правда, придется набрать дополнительно не одну строчку исходного текста.