Главная Интернет WEB-учебник Java в примерах


Интернет клуб

Новая страница
Описание html
Javascript
Java в примерах

Что такое JAVA?
Первое приложение на JAVA
Первый апплет на JAVA
Управление шрифтами
Строковые переменные
Работа с массивами
Работа с графикой
Операции с мышкой
Операции с клавиатурой
Структура апплета
Работа с потоками
Передача параметров в апплет
Загрузка изображения в апплет
Контроль за ходом загрузки изображения
Двойная буферизация
Создание изображения из массива данных
Корректировка изображения

Полезные сайты
Задайте вопрос









Web-учебник. Раздел 4. Java в примерах.





Управление шрифтами



В этом разделе синим цветом выделены комментарии. К сведению начинающих программистов: комментарии - очень важный аспект программы , особенно при создании систем, рассчитанных на годы. Поверьте мне , программисту с 27 - летним стажем, что хорошие комментарии очень помогают. Любую серьезную систему надо не только создавать, но и поддерживать в процессе эксплуатации - вносить изменения, искать ошибки. Учтите и текучесть кадров - новый сотрудник должен быстро разобраться в Вашем Творении. Лично для меня умение сопроводить программу хорошими комментариями - один из признаков класса программиста. Я советую начинающим программистам начать учиться создавать толковые комментарии уже на простейших программах.
Другой важный аспект - имена переменных. Вы должны присваивать переменным такие имена, чтобы другой программист при чтении Вашей программы понимал назначение каждой переменной. Кроме того, не используйте одну переменную в разных частях программы для разных целей. Введите лучше несколько переменных. Мнимая экономия памяти чревата грубыми ошибками.
Но - вернемся к нашим апплетам.

Рассмотрим апплет MyNewFont, определяющий виды шрифтов, их размеры и стиль.

//------------------------------------------------------------  
//   Program :  MyNewFont 
//------------------------------------------------------------  
//   Author  :  Katz Yakov 
//------------------------------------------------------------  
//   Date    :  24/11/97 
//------------------------------------------------------------

import  java.awt.*;
import  java.applet.*;
//------------------------------------------------------------
// Определение класса MyNewFont
public  class  MyNewFont  extends  Applet  {
  // Определение метода перерисовки окна апплета
  public  void  paint  (Graphics  dr) {
    // Определение  3 шрифтов
    Font BigFontTR    = new Font("TimesRoman", Font.BOLD,   30); 
    Font MiddleFontDi = new Font("Dialog", Font.ITALIC, 24); 
    Font LittleFontCr = new Font("Courier", Font.BOLD + Font.ITALIC, 16);
    // Вывод текста с первым шрифтом
    dr.setFont(BigFontTR);
    dr.drawString ("First line, TimesRoman, Bold, 30" , 10, 40);
    // Вывод текста со вторым шрифтом
    dr.setFont(MiddleFontDi);
    dr.drawString ("Second line, Dialog, Italic, 24" , 10, 100);
    // Вывод текста с третьим шрифтом
    dr.setFont(LittleFontCr);
    dr.drawString ("Third line, Courier, Bold,Italic, 16" , 10, 160);
  }
}

Мы определяем 3 различных шрифта.
Первый шрифт Font30TimesRomanBold - это новый (new) обьект определенного в Java класса Font. Обратите внимание, что метод (Font) совпадает по имени с именем класса. Такой метод называется конструктором класса и автоматически вызывается при создании любого обьекта этого класса.
В данном случае конструктор имеет 3 параметра:
- Имя шрифта - Times Roman,
- Стиль шрифта - Bold - "жирный" шрифт,
- Размер шрифта - 30.
Обратите внимание на соответствие имени переменной шрифта Font30TimesRomanBold ее содержанию.
Два других шрифта Font24DialogItalic и Font16CorierBoldItalic определяются аналогично.
Для вывода на экран текста с первым шрифтом мы пользуемся методом setFont контекста устройства dr , который записывает наш шрифт в этот контекст.
После этого выводим наш текст на экран с помощью метода drawString - этот метод мы уже рассматривали.
Тексты со вторым и третьим шрифтами выводятся аналогично.
Если Вы - начинающий программист и поняли не все - не беда, туман постепенно рассеется по мере чтения следующих примеров.

Апплет MyNewFont выглядит следующим образом:

Следующий апплет MyColFont предназначен для вывода цветного шрифта. (Замечу, что, когда я попытался назвать этот апплет именем MyColorFont , компилятор выдал много ошибок и я долго мучился, пока не попробовал изменить имя. Кто знает в чем дело?).

//------------------------------------------------------------  
//   Program :  MyColFont 
//------------------------------------------------------------  
//   Author  :  Katz Yakov 
//------------------------------------------------------------  
//   Date    :  24/11/97 
//------------------------------------------------------------

import  java.awt.*;
import  java.applet.*;
//------------------------------------------------------------
// Определение класса MyColFont
public  class  MyColFont  extends  Applet  {
  // Определение метода перерисовки окна апплета
  public  void  paint  (Graphics  dr) {
    // Определение шрифта
    Font Font30TimesRomanBold   = new Font("TimesRoman", Font.BOLD, 30); 
    dr.setFont(Font30TimesRomanBold);
    // Задание красного цвета
    dr.setColor(Color.maroon);
    dr.drawString ("This color is maroon" , 10, 40);
    // Задание зеленого цвета
    dr.setColor(Color.navy);
    dr.drawString ("This color is navy" , 10, 100);
    // Задание синего цвета
    dr.setColor(Color.navy);
    dr.drawString ("This color is navy" , 10, 160);
  }
}

Единственный новый метод в этом апплете - метод задания цвета setColor шрифта в контекста устройства. Можно задавать все цвета со стандартными именами.

Апплет MyColFont выглядит следующим образом:

В этом разделе мы использовали 3 различных шрифта:
- TimesRoman,
- Dialog,
- Courier.
В заключении раздела рассмотрим вывод текста в середину апплета MyCenterString. Здесь мы будем пользоваться методом getSize класса Component для определения размеров окна апплета.


//------------------------------------------------------------  
//   Program :  MyCenterString
//------------------------------------------------------------  
//   Author  :  Katz Yakov 
//------------------------------------------------------------  
//   Date    :  05/12/97 
//------------------------------------------------------------
import  java.awt.*;
import  java.applet.*;
//------------------------------------------------------------
// Определение класса MyColFont
public  class  MyCenterString  extends  Applet  {
// Определение метода перерисовки окна апплета
  public  void  paint  (Graphics  dr) {
    // Переменные для длины и высоты окна апплета
    int window_width; 
    int window_height; 
    // Переменные для длины и высоты 
    // выводимого текста
    int text_width; 
    int text_height; 
    // Координаты начальной точки для вывода 
    // текста в апплет
    int begin_width; 
    int begin_height;
    // Создание обьекта класса Font для вывода текста
    Font Font30TimesRomanPlain = 
         new Font("TimesRoman", Font.PLAIN, 30); 
    // Создание обьекта класса FontMetrics
    // для получения данных о шрифте 
    FontMetrics fontMetrics;
    // Определение ширины и высоты окна апплета
    window_width  = size().width;
    window_height = size().height;
    // Установление фонта для текущего дескриптора
    dr.setFont(Font30TimesRomanPlain);
    // Получение метрик шрифта
    fontMetrics = dr.getFontMetrics();
    // Определение длины и высоты шрифта
    text_width  = 
       fontMetrics.stringWidth("My text is in the center");
    text_height = fontMetrics.getHeight();
    // Определение начальных координат текста
    begin_width  = (window_width  - text_width)  / 2;
    begin_height = window_height / 2;
    // Задание красного цвета для текущего дескриптора
    dr.setColor(Color.maroon);  
    // Вывод текста в центр апплета
    dr.drawString ("My text is in the center" ,
                    begin_width, begin_height);
  }
}

Апплет MyCenterString выглядит следующим образом:

Я долго мучился над этим примером.
Дело в том, что метод size() в принципе предусмотрен в модели 1.0, а в модели 1.1 при компиляции выдается предупреждение "MyCenterString.java uses a deprecated API", но апплет создается и работает, если же применять предназначенный для модели 1.1 метод getSize(), но этот апплет не работает в Netscape.







  ©1996-2007   Megapolis Org   E-mail:   info@megapolis.org