Um in der Mapkomponente von JXMapKit eine Selektion (Rechteck mit Rahmen und leicht transparenter Füllung) zu zeichnen, wird lediglich ein entsprechender Painter und ein Mouseadapter benötigt. Der Code dazu sieht folgendermaßen aus:
Der Painter & MouseListener:
public class SelectionPainter extends MouseAdapter implements Painter<JXMapViewer> {
private Rectangle rect, start, end;
private Color borderColor = new Color(0, 0, 200);
private Color regionColor = new Color(0, 0, 200, 75);
public SelectionPainter() {
}
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() != MouseEvent.BUTTON1) {
rect = null;
start = null;
} else {
start = new Rectangle(e.getPoint());
((JXMapViewer) e.getSource()).setPanEnabled(false);
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (start != null) {
end = new Rectangle(e.getPoint());
rect = start.union(end);
}
((JXMapViewer) e.getSource()).repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
if (start == null) {
return;
}
end = new Rectangle(e.getPoint());
rect = start.union(end);
((JXMapViewer) e.getSource()).setPanEnabled(true);
((JXMapViewer) e.getSource()).repaint();
}
@Override
public void paint(Graphics2D gd, JXMapViewer t, int i, int i1) {
if (rect != null) {
gd.setColor(regionColor);
gd.fillRect(rect.x, rect.y, rect.width, rect.height);
gd.setColor(borderColor);
gd.drawRect(rect.x, rect.y, rect.width, rect.height);
}
}
}
Verbindung zur Map-Komponente:
SelectionPainter sp = new SelectionPainter();
mapKit.getMainMap().addMouseListener(sp);
mapKit.getMainMap().addMouseMotionListener(sp);
mapKit.getMainMap().setOverlayPainter(sp);
mapKit ist dabei eine Instanz von org.jdesktop.swingx.JXMapKit
.