содержание   вперед   назад

15. Класс 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)) .

Здесь я отметил только новые классы и методы, используемые в данном классе и не появлявшиеся ранее. Остальное вам уже знакомо по другим классам и нет смысла повторяться. По этой причине читать книгу лучше всего от начала до конца, это не справочник, информация дается на конкретных примерах, но только один раз. Однако читатель может использовать все методы работы с книгой. Один из методов состоит в том, что выписываются интересные места в свою собственную записную книжку и снабжаются собственными комментариями. Я сам так делаю, это очень удобно. Ну и другой способ состоит в том, что сложные книги надо много раз перечитывать. Поначалу многое не понятно, но при втором чтении и далее, открываются новые смыслы и детали.

содержание   вперед   назад


.