📄 rulertool.java
字号:
package mapcenter.maptools;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.mapinfo.util.*;
import com.mapinfo.mapj.*;
public class RulerTool extends MapTool{
private int clickX = Integer.MIN_VALUE;
private int clickY = Integer.MIN_VALUE;
private int moveX = Integer.MIN_VALUE;
private int moveY = Integer.MIN_VALUE;
private boolean initFlag = false;
private double distanceSum = 0;
public RulerTool() {
super("/image/ruler1.gif","/image/ruler2.gif","测距","测距工具",'O');
ImageIcon icon = new ImageIcon(getClass().getResource("/image/ruler.gif"));
Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(icon.getImage(),new Point(0,0),"测距");
super.cursor = cursor;
}
public void actionPerformed(ActionEvent evt) {
super.actionPerformed(evt);
}
//============= MouseListener接口实现 =============
public void mouseEntered(MapMouse evt) {}
public void mouseExited(MapMouse evt) {}
public void mousePressed(MapMouse evt) {}
public void mouseDragged(MapMouse evt) {}
public void mouseReleased(MapMouse evt) {}
public void mouseClicked(MapMouse evt) {
Graphics g = mapView.getGraphics();
Color c = g.getColor();
g.setColor(Color.black);
int button = evt.getButton();
switch (button){
case 1://鼠标左键
if(initFlag == true){
g.drawLine(clickX, clickY, evt.getX(), evt.getY());//增量画线
try{
MapJ mapJ = mapView.getMapHandle().getMapJ();
DoublePoint startPoint = mapJ.transformScreenToNumeric(new DoublePoint(clickX,clickY));
DoublePoint endPoint = mapJ.transformScreenToNumeric(evt.getDoublePoint());
double distance = mapView.getMapHandle().getMapJ().cartesianDistance(startPoint,endPoint);
String distanMsg = String.valueOf((int)(distance*1000)) + "米";
g.drawString(distanMsg, evt.getX(), evt.getY());//标记距离
distanceSum += distance;
}catch(Exception e){log.error(e);}
}
clickX = evt.getX();
clickY = evt.getY();
initFlag = true;
break;
case 3://鼠标右键
if(initFlag == false)return;
String distanMsg = "距离合计" + String.valueOf((int)(distanceSum*1000)) + "米";
g.drawString(distanMsg, evt.getX(),evt.getY());//标记总距离
g.setXORMode(Color.white);
g.drawLine(clickX,clickY,moveX,moveY);
clickX = Integer.MIN_VALUE;
clickY = Integer.MIN_VALUE;
moveX = Integer.MIN_VALUE;
moveY = Integer.MIN_VALUE;
distanceSum = 0;
initFlag = false;
break;
}
g.setColor(c);
g.setPaintMode();
}
public void mouseMoved(MapMouse evt) {
if(initFlag == false)return;
//======= 绘制轨迹线 ======
Graphics g = mapView.getGraphics();
Color c = g.getColor();
g.setColor(Color.black);
g.setXORMode(Color.white);
if(clickX != Integer.MIN_VALUE && moveX != Integer.MIN_VALUE){
g.drawLine(clickX,clickY,moveX,moveY);
}
g.drawLine(clickX, clickY, evt.getX(), evt.getY());
g.setColor(c);
g.setPaintMode();
moveX = evt.getX();
moveY = evt.getY();
}
//============= KeyListener接口实现 =============
public void keyTyped(KeyEvent evt) {}
public void keyPressed(KeyEvent evt) {}
public void keyReleased(KeyEvent evt) { }
public void paintOnMap(Graphics g) { }
//============= ToolTipTextSetter接口实现 ========
public String getToolTipText(MapMouse evt) {return "测距";}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -