// =========================================================
// Установка различных шрифтов.
// Демонстрация способов передачи параметров в аплет
//
// (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 TextOut extends Applet
{
  // -------------------------------------------------------
  // Поля класса.
  // Создаются автоматически для всех параметров аплета
  // -------------------------------------------------------
	private String m_Str1 = "Hello 1";
	private String m_Str2 = "Hello 2";
	private String m_Str3 = "Hello 3";
	private String m_Str4 = "Hello 4";
	private String m_Str5 = "Hello 5";
	private String m_Font1 = "Arial";
	private String m_Font2 = "Courier";
	private String m_Font3 = "Times";
	private String m_Font4 = "Helvetica";
	private String m_Font5 = "Undefined";
	private String m_Type1 = "Bold";
	private String m_Type2 = "Italic";
	private String m_Type3 = "Plain";

  // -------------------------------------------------------
  // Имена параметров
  // -------------------------------------------------------
	private final String PARAM_Str1 = "Str1";
	private final String PARAM_Str2 = "Str2";
	private final String PARAM_Str3 = "Str3";
	private final String PARAM_Str4 = "Str4";
	private final String PARAM_Str5 = "Str5";
	private final String PARAM_Font1 = "Font1";
	private final String PARAM_Font2 = "Font2";
	private final String PARAM_Font3 = "Font3";
	private final String PARAM_Font4 = "Font4";
	private final String PARAM_Font5 = "Font5";
	private final String PARAM_Type1 = "Type1";
	private final String PARAM_Type2 = "Type2";
	private final String PARAM_Type3 = "Type3";

	// -------------------------------------------------------
  // getAppletInfo
  // Метод, возвращающей строку информации об аплете
  // -------------------------------------------------------
	public String getAppletInfo()
	{
		return "Name: TextOut\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";
	}

	// -------------------------------------------------------
  // getParameterInfo
  // Метод, возвращающий описание параметров
  // -------------------------------------------------------
  public String[][] getParameterInfo()
	{
		String[][] info =
		{
			{ PARAM_Str1, "String", "Text string to write" },
			{ PARAM_Str2, "String", "Text string to write" },
			{ PARAM_Str3, "String", "Text string to write" },
			{ PARAM_Str4, "String", "Text string to write" },
			{ PARAM_Str5, "String", "Text string to write" },
			{ PARAM_Font1, "String", "Text font" },
			{ PARAM_Font2, "String", "Text font" },
			{ PARAM_Font3, "String", "Text font" },
			{ PARAM_Font4, "String", "Text font" },
			{ PARAM_Font5, "String", "Text font" },
			{ PARAM_Type1, "String", "Font type" },
			{ PARAM_Type2, "String", "Font type" },
			{ PARAM_Type3, "String", "Font type" },
		};
		return info;		
	}

  // -------------------------------------------------------
  // init
  // Вызывается во время инициализации аплета
  // -------------------------------------------------------
	public void init()
	{
    // Рабочая переменная для получения параметров
    String param;

		// Получение параметров и сохранение
    // их значений в полях класса

    // Строки, которые будут выведены в окно аплета
    param = getParameter(PARAM_Str1);
		if (param != null)
			m_Str1 = param;

		param = getParameter(PARAM_Str2);
		if (param != null)
			m_Str2 = param;

		param = getParameter(PARAM_Str3);
		if (param != null)
			m_Str3 = param;

		param = getParameter(PARAM_Str4);
		if (param != null)
			m_Str4 = param;

		param = getParameter(PARAM_Str5);
		if (param != null)
			m_Str5 = param;

		// Шрифты для отображения строк
    param = getParameter(PARAM_Font1);
		if (param != null)
			m_Font1 = param;

		param = getParameter(PARAM_Font2);
		if (param != null)
			m_Font2 = param;

		param = getParameter(PARAM_Font3);
		if (param != null)
			m_Font3 = param;

		param = getParameter(PARAM_Font4);
		if (param != null)
			m_Font4 = param;

		param = getParameter(PARAM_Font5);
		if (param != null)
			m_Font5 = param;

		// Начертание шрифтов
    param = getParameter(PARAM_Type1);
		if (param != null)
			m_Type1 = param;

		param = getParameter(PARAM_Type2);
		if (param != null)
			m_Type2 = param;

		param = getParameter(PARAM_Type3);
		if (param != null)
			m_Type3 = param;
	}

  // -------------------------------------------------------
  // paint
  // Метод paint, выполняющий рисование в окне аплета
  // -------------------------------------------------------
	public void paint(Graphics g)
  {
    // Начальная координата для вывода по вертикали
    int yStart   = 20;

    // Текущая координата для вывода строки
    int yCurrent = 20;

    // Определяем текущие размеры окна аплета
    Dimension dimAppWndDimension = size();
    
    // Выбираем в контекст отображения желтый цвет
    g.setColor(Color.yellow);
    
    // Закрашиваем внутреннюю область окна аплета
    g.fillRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Выбираем в контекст отображения черный цвет
    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Получаем стиль шрифта и выбираем шрифт
    // в соответствии с этим стилем
    if(m_Type1.equals("Bold"))
      g.setFont(new Font(m_Font1, Font.BOLD, 25));

    else if(m_Type1.equals("Italic"))
      g.setFont(new Font(m_Font1, Font.ITALIC, 25));

    else if(m_Type1.equals("Plain"))
      g.setFont(new Font(m_Font1, Font.PLAIN, 25));

    // Отступ для первой строки
    yCurrent += yStart;

    // Рисуем первую строку
    g.drawString(m_Str1, 10, yCurrent);

    // Определяем метрики шрифта
    FontMetrics fm = g.getFontMetrics();

    // Устанавливаем новую текущую позицию для
    // вывода очередной строки
    yCurrent += fm.getHeight();

    // Выбираем шрифт в контекст отображения
    if(m_Type1.equals("Bold"))
      g.setFont(new Font(m_Font2, Font.BOLD, 25));

    else if(m_Type1.equals("Italic"))
      g.setFont(new Font(m_Font2, Font.ITALIC, 25));

    else if(m_Type1.equals("Plain"))
      g.setFont(new Font(m_Font2, Font.PLAIN, 25));

    // Рисуем вторую строку
    g.drawString(m_Str2, 10, yCurrent);

    // Устанавливаем новую текущую позицию для
    // вывода очередной строки
    fm = g.getFontMetrics();
    yCurrent += fm.getHeight();

    // Выбираем шрифт в контекст отображения
    if(m_Type2.equals("Bold"))
      g.setFont(new Font(m_Font3, Font.BOLD, 25));

    else if(m_Type2.equals("Italic"))
      g.setFont(new Font(m_Font3, Font.ITALIC, 25));

    else if(m_Type2.equals("Plain"))
      g.setFont(new Font(m_Font3, Font.PLAIN, 25));

    // Рисуем третью строку
    g.drawString(m_Str3, 10, yCurrent);

    // Устанавливаем новую текущую позицию для
    // вывода очередной строки
    fm = g.getFontMetrics();
    yCurrent += fm.getHeight();

    // Выбираем шрифт в контекст отображения
    if(m_Type2.equals("Bold"))
      g.setFont(new Font(m_Font4, Font.BOLD, 25));

    else if(m_Type2.equals("Italic"))
      g.setFont(new Font(m_Font4, Font.ITALIC, 25));

    else if(m_Type2.equals("Plain"))
      g.setFont(new Font(m_Font4, Font.PLAIN, 25));

    // Рисуем четвертую строку
    g.drawString(m_Str4, 10, yCurrent);

    // Устанавливаем новую текущую позицию для
    // вывода очередной строки
    fm = g.getFontMetrics();
    yCurrent += fm.getHeight();

    // Выбираем шрифт в контекст отображения
    if(m_Type3.equals("Bold"))
      g.setFont(new Font(m_Font5, Font.BOLD, 25));

    else if(m_Type3.equals("Italic"))
      g.setFont(new Font(m_Font5, Font.ITALIC, 25));

    else if(m_Type3.equals("Plain"))
      g.setFont(new Font(m_Font5, Font.PLAIN, 25));

    // Рисуем пятую строку
    g.drawString(m_Str5, 10, yCurrent);
	}
}
