2

JMapViewerToolTipのカスタムMapMarkerにa を追加しようとしています。しかし、検索を繰り返しても、これを解決するのに役立ちません。

カスタムMapMarkerは次のとおりです。

public class MapMarkerUnit extends MapObjectImpl implements MapMarker

Paint Methodオーバーライドは

public void paint(Graphics g, Point position, int radio) {
    String filename = "marker.png";
    //System.out.print(filename);
    BufferedImage x = null;
    try {
        x = ImageIO.read(getClass().getResource(filename));
    } catch (IOException ex) {
        Logger.getLogger(MapMarkerUnit.class.getName()).log(Level.SEVERE, null, ex);
    }

    g.drawImage(x, position.x-16, position.y-37,null);

    //if(getLayer()==null||getLayer().isVisibleTexts()) paintText(g, new       Point(position.x+20,position.y));
}

ご協力いただきありがとうございます。

4

1 に答える 1

5

getToolTipText()のメソッドをオーバーライドしJMapViewerます。実装では、座標を測地座標getPosition()に変換するために使用します。MouseEvent以下の例は、フォーマットされていない座標を表示するだけです。最も近いものを見つけてMapMarker、適切なテキストを返す必要があります。

JMapViewer map = new JMapViewer() {

    @Override
    public String getToolTipText(MouseEvent e) {
        Coordinate c = getPosition(e.getX(), e.getY());
        return c.getLat() + " " + c.getLon();
    }
};
map.setToolTipText(""); // initialize 

補遺:ツールチップを画像に直接追加する方法はありますか?

いいえ; ツール ヒントを処理するJMapViewerエンクロージングです。JComponent

マップ上に約 50 個のマーカーがあります。これは多くの反復です。

MapMarker実装で画像をロードすることは絶対にできません。を使用しSWingWorkerて、バックグラウンドで画像をロードします。たとえば、 .

具体的な反復例として、JFreeChartこの方法で多数のエンティティのツール ヒントを簡単に処理できます。囲んでいるパネルのgetToolTipText()実装は次のとおりです。を呼び出すループShape#contains()は次のとおりです。アプローチを説明する単純化された例は、ここで見られます。

于 2014-09-20T01:53:29.767 に答える