|
окне верхней панели.
События, связанные с выбором нового цвета фона и изображения обрабатываются
следующим образом:
if(evt.target.equals(chBackgroundColor))
{
if(ch.getSelectedIndex() == 0)
pDraw.setBackground(Color.yellow);
else if(ch.getSelectedIndex() == 1)
pDraw.setBackground(Color.green);
else if(ch.getSelectedIndex() == 2)
pDraw.setBackground(Color.white);
}
else if(evt.target.equals(chForegroundColor))
{
if(ch.getSelectedIndex() == 0)
pDraw.setForeground(Color.black);
else if(ch.getSelectedIndex() == 1)
pDraw.setForeground(Color.red);
else if(ch.getSelectedIndex() == 2)
pDraw.setForeground(Color.blue);
}
Здесь методы setBackground и setForeground устанавливают цвет фона и
изображения для панели pDraw.
Если событие вызвано списком шрифтов, то мы получаем номер элемента списка и
записываем название выбранного шрифта в текстовую строку sFontName:
else if(evt.target.equals(chFont))
{
if(ch.getSelectedIndex() == 0)
sFontName = "Helvetica";
else if(ch.getSelectedIndex() == 1)
sFontName = "Courier";
else if(ch.getSelectedIndex() == 2)
sFontName = "TimesRoman";
}
После обработки события, вызванного списками, мы перерисовываем окно панели
рисования pDraw и окно аплета:
pDraw.repaint();
repaint();
Метод paint
Метод paint рисует в окне панели pDraw, а не в главном окне аплета. Для
этого метод paint получает контекст отображения этой панели, вызывая для этого
метод getGraphics:
Graphics gpDraw;
gpDraw = pDraw.getGraphics();
Далее метод paint определяет размеры панели pDraw и рисует рамку вокруг окна
этой панели:
Dimension dimAppWndDimension = pDraw.size();
gpDraw.drawRect(0, 0, dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
После того как рамка будет нарисована, метод paint устанавливает в панели
pDraw шрифт, название которого хранится в староке sFontName. Для этого
используется контекст отображения gpDraw, полученный нами ранее для панели
pDraw:
gpDraw.setFont(new Font(sFontName, Font.PLAIN, 12));
Текстовая строка отображается с использованием текущего цвета изображения и
текущего шрифта, установленного в контексте отображения gpDraw, при помощи
метода drawString:
gpDraw.drawString("Смотри на шрифт, цвет фона и текста!",
10, 50);
Затем метод paint обводит панель блокнота рамкой. Вначале он получает
контекст отображения для панели блокнота, как это показано ниже:
gpDraw = pCardPanel.getGraphics();
После получения контекста отображения метод paint определяет размеры панели
блокнота и рисует рамку вокруг его окна:
dimAppWndDimension = pCardPanel.size();
gpDraw.drawRect(0, 0, dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
Создание нового класса на базе класса Panel
Если ваш аплет создает много панелей, техника рисования в окнах этих панелей,
использованная в только что рассмотренном приложении Notebook, может привести
к усложнению исходного текста приложения. Так как рисование в окнах панелей
выполняется в методе paint класса аплета, вам придется получать контекст
отображения для каждой панели.
Намного проще создать несколько дочерних классов от класса Panel,
переопределив в каждом из них метод paint. В этом случае для каждой панели вы
можете создать свой метода paint, которому будет автоматически передаваться
контекст отображения, связанный с окном соответствующей панели.
Эта техника использована в приложении Panel2, которое мы рассмотрим в
следующем разделе.
Приложение Panel2
В окне аплета Panel2 мы создали две панели, одна из которых занимает верхнюю
половину окна, а другая - нижнюю (рис. 7.7).
Рис. 7.7. Окно аплета Panel2 с двумя панелями
Для каждой панели мы создали два отдельных класса на базе класса Panel. В
созданных нами классах переопределен метод paint, который рисует одну текстовую
строку в окне своей панели. В верхней панели рисуется строка “Первая панель”, в
нижней - “Вторая панел
|
|