Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
занятие14.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
258.05 Кб
Скачать

На заметку:

Первой инструкцией подключается библиотека Swing. Второй инструкцией подключается библиотека AWT. Она нам понадобится при работе с изображениями. Последней инструкцией подключается пакет, необходимый при обработке событий.

Класс для реализации окна ввода текста называется TextlnputFrame. Он реализует интерфейс ActionListener - для того, чтобы в этом же классе можно было предусмотреть выполнять обработку событий. При этом среди полей класса имеется ссылка frame на объект окна JFrame. Предполагается, что окно имеет метку, текстовое поле и две кнопки. Поэтому класс также содержит поля-ссылки: на метку с текстом enter (ссылка на объект класса JLabel), на текстовое поле tf (объект класса JTextField) и ссылки на кнопки btYes и btNo (объекты класса JButton). Кроме этих полей, в классе есть текстовое поле name, предназначенное для записи текста, вводимого пользователем. Все поля зарытые.

Конструктор класса принимает текстовый аргумент, который используется как текст метки. В теле конструктора размеры создаваемого окна задаются целочисленными переменными width (ширина окна) и height (высота окна). Окно создается командой frame=new JFrame (" Окно для ввода текста (имени) ..."). Определение положения и установка размеров окна выполняется командой frame.setBounds(400, 300, width, height). Инструкцией frame.setLayout(null) отключаем менеджер компоновки окна. Текстовая метка для поля текстового ввода создается командой enter=new JLabel(msg,JLabel.LEFT).

На заметку:

Вторым аргументом конструктору класса JLabel передана константа JLabel.LEFT. Это означает, что выравнивание текста в области метки выполняется по левому краю.

Положение и размер метки задаем с помощью команды enter.setBounds(10,10,width-20, height/6). Метка занимает почти всю ширину окна - остается по 10 пикселей по краям. Высота метки составляет шестую часть высоты окна.

Текстовое поле ввода создаем командой tf=new JTextField (frame.getWidth()-20). Аргументом конструктору передается инструкция frame. getWidth()-20. Здесь для разнообразия мы размер (ширину) окна узнали не через переменную width, а вызовом метода getWidth () объекта окна frame. Положение и размер текстового поля задаются командой tf.setBounds(10,enter.getHeight()+5,enter.getWidth(),height/6). В команде использован вызов методов getHeight() и getWidth() из объекта метки enter, которые соответственно возвращают высоту и ширину метки. Высота поля такая же, как и высота метки и составляет шестую часть высоты окна.

Кнопка для подтверждения ввода текста пользователем создается командой btYes=new JButton ("Подтверждаю"). Положение и размеры кнопки задаем командой btYes.setBounds(10,height/2 + 10,(width-30)/2,height/6). Также в коде можно заметить команду btYes.setFocusPainted(false). Данной командой отменяется режим отображения рамки в области текста кнопки при передаче кнопке фокуса. Здесь исключительно эстетический момент, зацикливаться на нем не стоит.

Кнопка для завершения работы программы создается командой btNo=newJButton ("Завершить"). Положение и размеры кнопки задаются командой btNo.setBounds((width-30)/2+18,height/2+10, (width-30)/2, height/6). Как и для кнопки подтверждения ввода текста, для кнопки завершения работы отменяем для кнопки режим отображения рамки фокуса в кнопке с помощью команды btNo.setFocusPainted(false).

Предполагается, что при закрытии окна щелчком на системной пиктограмме работа программы завершается. Поэтому в программный код добавляем команду frame.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE), определяющую реакцию на щелчок системной пиктограммы закрытия окна. После этого в коде класса следует серия команд по добавлению созданных компонентов в окно. Добавление в окно текстовой метки осуществляется командой frame.add(enter). Текстовое поле добавляем командой frame.add(tf), а кнопки — командами frame.add(btYes) и frame.add(btNo).

Мы создаем окно с фиксированными размерами. То есть такое окно, размеры которого захватом и растягиванием границ изменить нельзя. Для этого в код помещена инструкция frame.setResizable(false), которой отменяется возможность изменения размеров окна. Регистрация обработчика щелчка в кнопке подтверждения выполняется командой btYes.addActionListener(this), а регистрация обработчика щелчка в кнопке отмены - командой btNo.addActionListener(this). Обращаем внимание, что в обоих случаях объектом обработчика указывается создаваемый объект (ссылка this). Отображается окно командой frame . setVisible (true). На этом код конструктора заканчивается.

Чтобы объект класса мог использоваться в качестве обработчика щелчка на кнопке, в классе необходимо определить метод actionPerformed() из интерфейса ActionListener. В данном случае метод описан так, что при его выполнении сначала проверяется, какая кнопка нажата. Если нажата кнопка подтверждения, то значение текстового поля запоминается, окно с экрана убирается, а взамен открывается новое окно для ввода числа. Если нажата кнопка завершения программы, окно закрывается, а работа программы завершается.

Считывание текста нажатой кнопки выполняется командой String btName=ae.getActionCommand(). Здесь объявляется текстовая переменная btName, а значение переменной определяется в результате вызова метода getActionCommand(), который вызывается из объекта ае. Объект ае относится к классу ActionEvent и определен как объект аргумента actionPerformed(). Объект ае является объектом события и содержит информацию о нем. В частности, метод getActionCommand(), будучи вызван из объекта события, возвращает текстовое название для параметра, который называется команда действия. Для кнопки по умолчанию название команды действия совпадает с текстом на кнопке. Поэтому в следующем условном операторе проверяется условие btName.equalsIgnoreCase(btYes.getText()). Здесь проверяется (без учета состояния регистра) текстовое название кнопки подтверждения ввода (инструкция btYes.getText()) и текст, записанный в переменную btName. Если это так, то есть нажата кнопка подтверждения, командой name=tf.getText() значение текстового поля tf считывается и запоминается в поле name.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]