Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

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);
[Назад] [Содеожание] [Дальше]