[Назад]   [Вперед]

Виктор Кон,   vkBook, Java-Second

Класс inpForm - окна ввода

Последний класс данной серии inpForm показывает отдельное окно, в котором может быть много различных окон ввода, снабженных комментариями, и две кнопки [OK] и [Cancel]. Откроем код класса по ссылке и приступим к работе. Этот класс тоже расширяет класс JDialog, поэтому многие конструкции вам уже знакомы. Конструктор класса имеет 7 аргументов, которые уже обсуждались при анализе класса fileFrame. Это окно -- хозяин диалога, название окна диалога, массив текстов-комментариев, массив исходных текстов в окнах ввода, число окон ввода, параметр задающий ширину окна диалога и параметр, определяющий конфигурацию окон ввода, когда их много. Вообще говоря число окон ввода можно было и не указывать, но это полезно, когда оно не совпадает с размером массивов lab и txt. В данном случае режим остановки программы задан без вариантов, а параметр mod имеет другой смысл и описывает компоновку многих окон ввода внутри общего окна класса. Сами окна ввода являются объектами класса JTextField и из таких объектов устроен массив. Исходные тексты в окнах ввода передаются через аргумент конструктора. Затем они копируются во внутренний массив строк tt и затем новое содержание окон ввода передается этому массиву, а затем копируется в общий массив MyPro.tt.

Общая компоновка окна по прежнему по умолчанию, то есть BorderLayout, но расположение объектов регулируется с помощью промежуточных компоновщиков -- объектов класса Box. Объекты этого класса заказываются не через конструктор, а статическими методами этого же класса Box.createHorizontalBox() и Box.createVerticalBox() для горизонтального ящика и для вертикального ящика соответственно. Объекты добавляются в ящики стандартным методом add. В горизонтальном ящике каждый новый элемент располагается справа от предыдущего. В вертикальном ящике каждый новый элемент располагается ниже предыдущего. Объект Box.createHorizontalStrut(5) означает объект, представляющий собой пустое пространство с размером 5 по горизонтали. То же самое с вертикальными объектами. Горизонтальные ящики могут служить объектами для вертикальных ящиков и наоборот, что позволяет реализовать достаточно сложную компоновку объектов. Данный класс я взял в готовом виде из своей программы vkACL. В нем заказано много различных компоновок в зависимости от значения параметра mod. Я не буду их все объяснять, вы можете просто проверить их экспериментальным путем или разобраться в написанном коде. В режиме, который реально используется в программе, комментарий стоит над единственным окном ввода, а кнопки расположены внизу и посередине. Полное окно упаковывается и размер окна реально определяется размером пустого пространства слева и справа от кнопок, устанавливамое посредством методов hbox.add(Box.createHorizontalStrut(ns1)).

Здесь я отметил только новые классы и методы, используемые в данном классе и не появлявшиеся ранее. Остальное вам уже знакомо по другим классам и нет смысла повторяться.


[Назад]   [Вперед]
Hosted by uCoz