Salve a tutti. Il mio problema è abbastanza complicato comunque provo a farmi capire.
ho inserito in una pagina web un'applet chiamata MapListener il cui codice sorgente è il seguente:
import javax.swing.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import netscape.javascript.*;
import java.lang.Object.*;
public class MapListener extends JApplet implements MouseListener {
public int mx, my; // the mouse coordinates
private JSObject mapWin;
public String [] args;
public void init() {
mx = 0; my = 0;
args = new String[2];
//Register for mouse events on blankArea and applet.
addMouseListener(this);
mapWin = JSObject.getWindow(this);
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseClicked(MouseEvent e) {
mx = e.getX();
my = e.getY();
args[0] = Integer.toString(mx);
args[1] = Integer.toString(my);
mapWin.call("appletXY2WorldCoords", args);
}
public int getX() {
return mx;
}
public int getY() {
return my;
}
public void clearCoordinates() {
mx = 0; my = 0;
}
}
All'interno della pagina che contiene l'applet ho inserito le funzioni javascript:
// convert retreived x, y coordinates into map units.
function appletXY2WorldCoords (x,y) {
var imsMap = parent.mapFrame.IMSMap;
var currentExtent = parent.mapFrame.document.IMSMap.getExtent();
var EnvelopeWidth = currentExtent.getXMax() - currentExtent.getXMin();
var EnvelopeHeight = currentExtent.getYMax() - currentExtent.getYMin();
var mapFrameWidth = parent.mapFrame.document.body.clientWidth;
var mapFrameHeight = parent.mapFrame.document.body.clientHeight;
var intX = parseInt(x);
var intY = parseInt(y);
var PointWorldX = intX / mapFrameWidth * EnvelopeWidth + currentExtent.getXMin();
var PointWorldY = (mapFrameHeight - intY) / mapFrameHeight * EnvelopeHeight + currentExtent.getYMin();
theLabel = selectByCircle(PointWorldX, PointWorldY, 0.0001);
imsMap.createAcetateLayer();
imsMap.addLabel(theLabel, PointWorldX, PointWorldY);
//alert(PointWorldX + ',' + PointWorldY);
}
// select features within a radius of x,y
function selectByCircle(inX,inY,theRadius) {
//if (checkSelectedLayer()) {
var layer = parent.mapFrame.IMSMap.getSelectedLayer();
var result = layer.selectByCircle(inX,inY,theRadius);
//if (useJavaAttributeDisplay) {
// displayAttributesUI();
//} else {
var labelValue = showSelect("");
layer.clearSelection();
return labelValue;
//}
//}
}
// show selected feature's name value
function showSelect(returnString) {
var anyLayer;
var layerName = "";
var msgString = "";
anyLayer = parent.mapFrame.IMSMap.getSelectedLayer();
if (anyLayer != null) {
if (returnString=="") returnString = parent.mapFrame.IMSMap.getSelectedLayer().getSelec tionSet();
layerName = anyLayer.getName();
var bigString = new String(returnString);
if (bigString == "") {
msgString = parent.msgList[10] + layerName;
alert(msgString);
}
else {
var theList = bigString.split("|");
var numRecs = theList.length - 1;
var theFields = theList[0].split("::");
var numFields = theFields.length;
var thisValue = "";
theValues = theList[1].split("::");
for (var j=1;j < theFields.length; j++) {
if (theFields[j].toUpperCase() == "NAME"){
thisValue = theValues[j];
return thisValue;
}
}
}
}
else {
msgString = parent.msgList[9];
alert(msgString);
}
}
e le altre due funzioni per la gestione del mouse:
// activate mouselistener
function activateMouseListener(){
var myApplet = parent.mapFrame.document.MapListener;
if (myApplet != null){
parent.mapFrame.IMSMap.getGlassPane().addMouseList ener(myApplet);
parent.mapFrame.IMSMap.getGlassPane().show();
} else{
alert("MapListener applet desn't exists.");
}
}
// deactivate the mouselistener
function deactivateMouseListener(){
var myApplet = parent.mapFrame.document.MapListener;
if (myApplet != null){
parent.mapFrame.IMSMap.getGlassPane().removeMouseL istener(myApplet);
parent.mapFrame.IMSMap.getGlassPane().hide();
//else{
//alert("MapListener applet desn't exists.");
}
}
In pratica, quando eseguo l'istruzione parent.mapFrame.IMSMap.getGlassPane().addMouseList ener(myApplet); ottengo un errore di scripting di non corrispondenza di tipo.Per quale motivo? Forse è sbagliato il parametro passato?
MapListener.class l'ho ottenuta compilando con jdk 1.4.0 (che contiene il package netscape.javascript). C'è qualche cosa che non va nell'interazione tra applet e javascript. Comunque il riferimento MyApplet è preso correttamente. Non so se mi sono espresso bene, sono penalizzato da una scarsa conoscenza di Java (il codice è preso, copiato ed incollato da un forum americano). Per chi lavora con gli ambienti GIS della ESRI come me, sto apportando modifiche al Java Viewer di ArcIMS per cercare di personalizzare un po' di più.
Grazie a quanti mi vorranno aiutare.