Microsoft Visual J++. Создание приложений и аплетов на языке Java. Часть 1© Александр Фролов, Григорий ФроловТом 30, М.: Диалог-МИФИ, 1997, 288 стр. Приложение TextEditПриложение TextEdit (рис. 5.13) демонстрирует некоторые приемы работы с многострочным полем редактирования текста, созданным на базе класса TextArea. Рис. 5.13. Окно приложения TextEdit В окне редактирования вы можете вводить строки текста. Если нажать на кнопку “Получить все”, в нижней части окна отобразится полное содержимое окна редактирования. Каждая строка будет отделена символом перехода на новую строку. Если же нажать кнопку “Получить выделенное”, в нижней части появится только выделенный фрагмент текста (как это показано на рис. 5.13). Исходные тексты приложенияИсходный текст приложения приведен в листинге 5.13. Листинг 5.13. Файл TextEdit\TextEdit.java // ========================================================= // Многострочное текстовое поле класса TextArea // // (C) Фролов А.В, 1997 // // E-mail: frolov@glas.apc.org // WWW: http://www.glasnet.ru/~frolov // или // http://www.dials.ccas.ru/frolov // ========================================================= import java.applet.*; import java.awt.*; public class TextEdit extends Applet { // Создаем ссылку на объект типа TextArea TextArea txt; // Создаем ссылку на объекты типа Button Button btnGetText; Button btnGetSelectedText; String str; // ------------------------------------------------------- // getAppletInfo // Метод, возвращающей строку информации об аплете // ------------------------------------------------------- public String getAppletInfo() { return "Name: TextEdit\r\n" + "Author: Alexandr Frolov\r\n" + "E-mail: frolov@glas.apc.org" + "WWW: http://www.glasnet.ru/~frolov" + "Created with Microsoft Visual J++ Version 1.0"; } // ------------------------------------------------------- // init // Метод, получающий управление при инициализации аплета // ------------------------------------------------------- public void init() { // Создаем редактируемое многострочное текстовое поле txt = new TextArea("Введите строку текста", 5, 35); // Создаем кнопку, с помощью которой можно получить // полное содержимое текстового поля btnGetText = new Button("Получить все"); // Создаем кнопку, с помощью которой можно получить // содержимое выделенной области текстового поля btnGetSelectedText = new Button("Получить выделенное"); // Добавляем текстовое поле в окно аплете add(txt); // Добавляем кнопки в окно аплете add(btnGetText); add(btnGetSelectedText); // Получаем и сохраняем текущий текст, // установленный в поле str = txt.getText(); // Устанавливаем цвет фона setBackground(Color.yellow); } // ------------------------------------------------------- // action // Метод вызывается, когда пользователь выполняет // действие над компонентами // ------------------------------------------------------- public boolean action(Event evt, Object obj) { // Ссылка на кнопку, от которой пришло сообщение Button btn; // Проверяем, что событие вызвано кнопкой, а не // другим компонентом if(evt.target instanceof Button) { // Получам ссылку на кнопку, вызвавшую событие btn = (Button)evt.target; // Проверяем ссылку на кнопку if(evt.target.equals(btnGetText)) { // Получаем и сохраняем текущий текст, // установленный в поле str = txt.getText(); // Перерисовываем окно аплета repaint(); } else if(evt.target.equals(btnGetSelectedText)) { // Получаем и сохраняем выделенную область str = txt.getSelectedText(); // Перерисовываем окно аплета repaint(); } // Если событие возникло от неизвестной кнопки, // мы его не обрабатываем else { return false; } // Возвращаем признак того, что мы обработали событие return true; } // Если событие вызвано не кнопкой, // мы его не обрабатываем return false; } // ------------------------------------------------------- // paint // Метод paint, выполняющий рисование в окне аплета // ------------------------------------------------------- public void paint(Graphics g) { // Определяем текущие размеры окна аплета Dimension dimAppWndDimension = size(); // Выбираем в контекст отображения черный цвет g.setColor(Color.black); // Рисуем рамку вокруг окна аплета g.drawRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); // Рисуем строку, полученную из текстового поля g.drawString("> " + str, 10, 150); } } Исходный текст документа HTML, созданного для аплета, приведен в листинге 5.14. Листинг 5.14. Файл TextEdit\TextEdit.html <html> <head> <title>TextEdit</title> </head> <body> <hr> <applet code=TextEdit.class id=TextEdit width=320 height=240 > </applet> <hr> <a href="TextEdit.java">The source.</a> </body> </html> Описание исходного текстаВ классе TextEdit мы определили четыре поля и несколько методов. Поля класса TxtFieldВ поле txt хранится ссылка на объект класса TextArea - многострочное поле редактирования: TextArea txt; В полях btnGetText, btnGetSelectedText и str хрянятся, соответственно, ссылки на кнопки и текстовую строку, в которую записывается текущее содержимое поля редактирования: Button btnGetText; Button btnGetSelectedText; String str; Метод getAppletInfoМетод getAppletInfo возвращает информацию о нашем аплете. Метод initМетод init создает одно текстовое поле редактирования, вызывая конструктор следующего вида: txt = new TextArea("Введите строку текста", 5, 35); Здесь создается поле из 5 строк и 35 столбцов. Далее этот метод создает кнопки, с помощью которых можно получить текущее содержимое всего поля редактирования и области, выделенной пользователем: btnGetText = new Button("Получить все"); btnGetSelectedText = new Button("Получить выделенное"); Затем созданные поле и кнопки добавляются в окно аплета при помощи метода add: add(txt); add(btnGetText); add(btnGetSelectedText); После этого метод init получает текущее содержимое поля редактирования и записывает его в строку str, а затем изменяет цвет фона: str = txt.getText(); setBackground(Color.yellow); Метод actionНаш метод action обрабатывает только те события, которые вызваны кнопками. Обработка заключается в извлечении текста из поля редактирования и записи его в строку str. В зависимости от того, какая кнопка была нажата, извлекается либо весь текст, либо только выделенный фрагмент: if(evt.target.equals(btnGetText)) { str = txt.getText(); repaint(); } else if(evt.target.equals(btnGetSelectedText)) { str = txt.getSelectedText(); repaint(); } else return false; Для извлечения всего текста мы вызываем метод getText, а для извлечения выделенного фрагмента - метод getSelectedText. После записи извлеченного текста метод action перерисовывает окно аплета, вызывая метод repaint. Метод paintПосле рисования рамки черного цвета вокруг окна аплета метод paint отобаржает текущее содержимое строки str в нижней части окна: g.drawString("> " + str, 10, 100); |