
- •Листинг 1. Создание окна с текстовым полем ввода
- •If (btName.EqualsIgnoreCase(btYes.GetText())) {
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •Листинг 2. Наследование классов компонентов
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •На заметку:
- •1. Чтобы научиться программировать — нужно программировать!
На заметку:
Здесь и выше для определения соответственно ширины и высоты формы frame использованы методы getWidth() и getHeight(). Таким образом, размеры и положение кнопки определяются в отношении к размерам окна, в которое помещается кнопка. При определении позиции кнопки по горизонтали сначала задается положение как для кнопки Да. Затем с помощью условного оператора для кнопки Нет положение (по горизонтали) уточняется.
Положение кнопки в окне задается командой setLocation(х,у), а добавляется кнопка в окно командой frame. add (this). Таким образом, команда добавления кнопки в окно размещена не в конструкторе окна, а в конструкторе кнопки. Собственно, это одна из причин, почему в классе MyButton в качестве поля использовалась ссылка frame на объект окна, в которое добавляется кнопка.
На заметку:
С практической точки зрения из сказанного следует, что для добавления кнопки в окно достаточно в конструкторе класса окна добавить команду создания объекта кнопки с аргументом - ссылкой на объект окна (инструкция this).
Для метки с изображением, которая размещается слева в области окна, также создается специальный класс. Он называется MyIconLabel и наследует класс JLabel. В этом классе, в силу уже отмеченных выше причин, есть закрытое поле frame, являющееся ссылкой на объект класса MyFrame. Значение этой ссылки передается аргументом конструктору класса. В конструкторе после создания изображения командой Imagelcon icn=new Imagelcon("d:\\books\\files\\rabbit.gif " ) это изображение добавляется в метку с помощью команды setIcon(icn). Положение и размер метки задается командой setBounds(5,15,frame.getWidth()/4-10,frame.getHeight()-30). Как и в случае с кнопками, размер и положение метки определяются относительно размеров окна, в которое добавляется метка. А добавляется метка в окно командой frame.add(this).
Класс MyMenuBar для панели меню расширяет библиотечный класс JMenuBar. Традиционно у класса в качестве поля определяется ссылка frame на объект класса MyFrame (окно, в которое добавляется панель меню). В конструкторе класса, кроме присваивания значения ссылке frame, командой JMenu wind=new JMenu ("Окно") создается объект wind класса JMenu. Это одно из трех меню, которые добавляются на панель меню. Аргументом конструктору класса JMenu передается имя меню (в данном случае это "Окно"). У этого меню два пункта меню, которые мы создаем командами JMenuItem apply=new JMenuItem("Подтверждаю") и JMenuItem exit=new JMenuItem ("Выход"). Таким образом, пункт меню - это объект класса JMenuItem. Как и в предыдущем случае, название пункта меню указывается аргументом конструктора класса.
Регистрация обработчиков событий выполняется командами apply.addActionListener(new HandlerYes(frame) ) и exit. addActionListener(new HandlerNo()).
На заметку:
Обратите внимание, что для пунктов меню Подтверждаю (объект apply) и Выход (объект меню exit) регистрируются такие же обработчики, как и для кнопок Да и Нет соответственно.
Создать меню и пункты меню - мало. Их необходимо добавить: пункты меню добавляются в меню, а меню добавляется в панель меню. Для этого используем такие команды: wind, add (apply) и wind, add (exit) (добавление пунктов меню в меню), а также add (wind) (добавление меню в панель меню). Аналогично создается второе и третье меню со всеми их пунктами. При регистрации обработчиков для пунктов меню используем метод addActionListener() с аргументом - анонимным объектом класса MenuHandler. Первым аргументом конструктору класса передается объект frame окна, в которое добавляется поле меню. Для пунктов меню По горизонтали вторым аргументом конструктору класса MenuHandler передается логическое значение true, а для пунктов меню По вертикали вторым аргументом конструктору класса MenuHandler передается логическое значение false.