Создание Java-апплета для отображения географических карт
Страница 2. Функция getMap()


 

Теперь приступим к getMap(). В качестве параметра вызова этого метода будет имя файла pic, который требуется показать. После загрузки картинки не забудем перерисовать апплет при помощи repaint();

/**
* Get file of map picture from URL.
*/
private void getMap(String pic)
{
map = getImage(getCodeBase(), pic);
repaint();
}

/**
* Update applet.
**/
public void update(Graphics g)
{
paint(g);
}

public void paint(Graphics g)
{
g.drawImage(map,0,0,this);
g.setColor(Color.black);
g.drawRect(0,0,size().width-1,
size().height-1);
if (!isZoom & curId!=0)
{
g.setColor(Color.red);
g.drawRect(lPoint[curId].x,
lPoint[curId].y,
rPoint[curId].x,
rPoint[curId].y);
}
}
Листинг 4. Методы getMap(), update() и paint() 

Для переключения между общим и детальным планом будем использовать булеву переменную isZoom, которая будет true, тогда когда нам потребуется увеличивать нашу карту, т.е. показать картинку детального плана. Увеличение/уменьшение будет происходить при помощи щелчка мыши по карте. Для того, чтобы пользователь, использующий наш апплет, смог определить куда ему нажимать (возможно, что не все области общего плана можно будет увеличить), при наведении курсора мыши на "кликабельную" область будем показывать ее прямоугольную рамку красного цвета. Таким образом вам осталось только добавить методы, которые будут отвечать за обработку событий мыши.

public boolean mouseUp(Event evt, int x, int y)
{
if (isZoom)
{
isZoom=false;
getMap(mapFile[0]);
}
else
{
if (curId == 0)
{
showStatus("This area have not zoom.");
}
else
{
isZoom=true;
getMap(mapFile[curId]);
}
}
return true;
}

public boolean mouseMove(Event evt, int x, int y)
{
int i;
i = getIndex(x,y);

if (!isZoom)
{
if (curId != i)
{
if (curId != 0)
repaint(lPoint[curId].x,
lPoint[curId].y,rPoint[curId].x+1,
rPoint[curId].y+1);
if (i != 0)
showArea(i);
curId = i;
}
}
return true;
}

/**
* Show area under mouse pointer.
**/
private void showArea(int i)
{
Graphics g = null;
g = this.getGraphics();
g.setColor(Color.red);
g.drawRect(lPoint[i].x,
lPoint[i].y,
rPoint[i].x,
rPoint[i].y);
}

/**
* Get index of map image.
**/
private int getIndex(int x, int y)
{
for (int i=1; i=lPoint[i].x
& x<=(lPoint[i].x+rPoint[i].x)
& y>=lPoint[i].y
& y<=(lPoint[i].y+rPoint[i].y))
return i;
return 0;
}
Листинг 5. Обработка событий мыши

 
« Предыдущая статья   Следующая статья »