2

こんにちはスタックオーバーフローコミュニティ、

私はJava初心者で、(動的)ソースから座標(latとlon)を取得し、JMapViewer(はい、JXMapViewerではありません)を使用してマーカーをマップに表示する単純なJavaプロジェクトを実行しています。すべての座標を2つのArrayListに入れました。それはそのように見えます:

for(int i = 0; i < latArrayList.size(); i++){
    map.addMapMarker(new MapMarkerDot((double)latArrayList.get(i), (double)longArrayList.get(i)));
}

編集:マップはjMapViewerオブジェクトです。

そして、それはかなりうまく機能します。問題は、タイマーを使用して20秒ごとにこのマップを更新する必要があることです。私が見つけた唯一の方法は、次のようにマップを開閉することでした。

    theMap.setVisible(false);
    theMap  = new Map();
    theMap.setVisible(true); 

編集:theMapはオブジェクトです(jMapViewerではなくjFrame)メイン関数で作成し(デモのように)、addMapMarkerを使用できません(theMap.addMapMarker(150.2,150.2)のように)

そして、ご想像のとおり、これはかなり厄介です(20秒ごとにウィンドウが開閉し、前の「ブラウジング」セッションが失われます)。それで、それをリフレッシュする方法はありますか?マーカーを動的に追加するか、コンテンツを更新するだけですか?

どうもありがとう。

4

2 に答える 2

2

私は2つのアプローチを見ます:

  • 既存のMapMarkerインスタンスのコレクションを維持し、提供された不変の実装removeMapMarker()を使用して使用します。どちらのメソッドもを呼び出します。addMapMarker()MapMarkerDotrepaint()

  • MapMarkerインターフェースを実装してMutableMapMarkerDot;を作成します。必要な数のインスタンスを追加します。その場で座標を更新し、リスナーで呼び出しrepaint()ます。javax.swing.Timer

于 2012-10-16T01:03:04.440 に答える
2

私はそのAPIを使用したことがありtheMap.removeAllMapMarkers();ませんが、うまくいくようです。その後、新しいマーカーの追加を再開できます。

ループに関しては、ジェネリックスを使用してリストを宣言した場合、doubleにキャストする必要はありません。

List<Double> latArrayList = new ArrayList<Double> ();
latArrayList.add(125.87); //or whatever

for(int i = 0; i < latArrayList.size(); i++){
    theMap.addMapMarker(new MapMarkerDot(latArrayList.get(i), longArrayList.get(i)));
}
于 2012-10-15T19:15:09.723 に答える