2a9cfd0b

Метод paint


Метод paint рисует в окне аплета текстовую строку и случайное число, полученное при помощи статического метода random класса Math:

public void paint(Graphics g)

{

  g.drawString("Running: " + Math.random(), 10, 20);

}

Напомним, что в однозадачном приложении метод paint вызывается при первом создании окна аплета, а также в случае необходимости перерисовки этого окна.

В нашем аплете будет создана отдельная задача, выполняющая периодическую перерисовку окна при помощи метода repaint. Поэтому случайное число в окне аплета будет постоянно меняться.


В предыдущем приложении метод paint периодически получал управление в результате периодического вызова метода repaint, выполняемого отдельной задачей. Метод paint аплета Rectangles вызывается только при инициализации и тогда, когда нужно обновить окно аплета. Этот метод определяет текущие размеры окна аплета, закрашивает окно желтым цветом и рисует вокруг окна черную рамку.




Метод paint подготавливает окно аплета для рисования - закрашивает его в желтый цвет и рисует вокруг окна черную рамку.




Метод paint просто закрашивает окно аплета желтым цветом и затем обводит его черной рамкой.






После традиционного для наших аплетов раскрашивания окна и рисования рамки метод paint создает входной буферизованный поток на базе массива bMemStream:

InStream = new DataInputStream(

  new BufferedInputStream(

  new ByteArrayInputStream(bMemStream)));

Поток создается в три этапа с помощью классов ByteArrayInputStream, BufferedInputStream и DataInputStream.

Далее мы читаем из созданного таким образом входного потока одну строку, вызывая для этого метод readLine:

g.drawString(InStream.readLine(), 10, 20);

Прочитанная строка отображается в окне аплета методом drawString.

После завершения работы с потоком мы его закрываем, для чего вызываем метод close:

InStream.close();




После раскрашивания фона окна аплета и рисования вокруг него рамки метод 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));



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