Microsoft Visual J++. Создание приложений и аплетов на языке Java

Метод paint


После раскрашивания фона окна аплета и рисования вокруг него рамки метод paint приступает к рисованию круговой диаграммы.

Прежде всего метод проверяет, является ли полученный из сети объект текстовой строкой класса String. Если является, то выполняется явное преобразование типа:

if(URLContent instanceof String)

{

  sChart = (String)URLContent;

}

В случае успеха в переменной sChart будет находиться строка исходных данных для построения диаграммы, а при ошибке - строка “<error>”, записанная туда при инициализации. Кроме того, в поле errno записывается значение 3.

Далее метод paint проверяет, были ли ошибки при создании объекта URL, получении содержимого файла исходных данных или преобразования данных в строку класса String. Если были, то в строку состояния навигатора записывается код ошибки и содержимое строки sChart. Если же ошибок не было, то в строке состояния отображаются исходные данные:

if(errno != 0)

  showStatus("errno: " + errno + ", sChart: " + sChart);

else

  showStatus(sChart);

На следующем этапе обработчик paint приступает к построению диаграммы.



Первым делом создается разборщик строки исходных данных:

StringTokenizer st =

  new StringTokenizer(sChart, ",\r\n");

В качестве разделителей для этого разборщика указывается запятая, символ возврата каретки и перевода строки.

Рисование секторов диаграммы выполняется в цикле, условием выхода из которого является завершение разбора строки исходных данных:

while(st.hasMoreElements())

{

  . . .

}

Для того чтобы секторы диаграммы не сливались, они должны иметь разный цвет. Цвет сектора можно было бы передавать вместе со значением угла через файл исходных данных, однако мы применили более простой способ раскаршивания секторов - в случайные цвета. Мы получаем случайные компоненты цвета сектора, а затем выбираем цвет в контекст отображения:

rColor = (int)(255 * Math.random());

gColor = (int)(255 * Math.random());

bColor = (int)(255 * Math.random());

g.setColor(new Color(rColor, gColor, bColor));



Содержание раздела