2016-07-08 19 views
1

Also ich bin neu in JMapViewer (und StackOverFlow). Was ich gerade versuche, ist eine grafische Echtzeitdarstellung eines Netzwerks zu entwickeln, wobei der Hintergrund eine Karte des Gebiets ist. Bisher lief es gut, aber ein Problem nervt mich. Wenn ich einen MapMarkerCircle erzeuge und den Namen festlege, möchte ich eine neue Zeile erstellen, um darunter Informationen anzuzeigen.Neue Zeile in MapMarkerCircle, JMapViewer

Ich habe versucht "\n", aber das wird nicht funktionieren. Ich habe versucht, es im HTML-Format und <br> um die Linie zu brechen, aber wieder, druckt es nur das gesamte Ding, als ob es eine Zeichenfolge war.

Wenn jemand schon einmal auf dieses Problem gestoßen ist, würde ich jede Hilfe sehr schätzen.

Hier ist ein kleiner Code, wo das Problem auftritt. Beachten Sie, dass "RateCircle" "MapMarkerCircle" erweitert.

Coordinate dataPoint= new Coordinate((pmpLinks[i].getRecieverSite().getLat()+pmpLinks[i].getTransmitter().getLat())/2, (pmpLinks[i].getRecieverSite().getLon()+pmpLinks[i].getTransmitter().getLon())/2);     
String rateStringName="<html>"+inRateAsString+"<br>kb/s</html>"; 

pmpCanopyRatePoints[i]=new RateCircle(allPMPrateLayer[i],rateStringName, dataPoint);      
map().addMapMarker(pmpCanopyRatePoints[i]); 

Antwort

0

Sie können System.lineSeparator() verwenden:

String rateStringName = inRateAsString + System.lineSeparator() + "kb/s"; 
+1

I'v versucht, dass jetzt, aber es scheint immer noch die gleiche Sache zu tun, gibt es nur auf der gleichen Linie – swilson1995

1

MapMarkerCircle::paint Anrufe MapMarkerCircle::paintText, die Graphics::drawString nennt, die keine besondere Bedeutung entspricht Zeichen oder Markup zu steuern. Ausgehend von diesem example zeichnet die Implementierung von paintText() unten eine zweite Linie unter der ersten.

Ich habe das Beispiel aktualisiert, um eine Möglichkeit zu bieten, den Namen und den Wert des Markers zu verknüpfen. Es verwendet eine Map<String, Integer>, übergibt einen Map.Entry<String, Integer> als Parameter an den RateCircle Konstruktor.

image

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.util.HashMap; 
import java.util.Map; 
import javax.swing.JFrame; 
import org.openstreetmap.gui.jmapviewer.Coordinate; 
import org.openstreetmap.gui.jmapviewer.JMapViewer; 
import org.openstreetmap.gui.jmapviewer.MapMarkerCircle; 
import org.openstreetmap.gui.jmapviewer.Style; 

/** 
* @see https://stackoverflow.com/a/38265252/230513 
* @see https://stackoverflow.com/a/33857113/230513 
*/ 
public class RateCircleTest { 

    private void display() { 
     JFrame f = new JFrame("London"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JMapViewer map = new JMapViewer() { 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 
     }; 
     Coordinate london = new Coordinate(51.5072, -0.1275); 
     map.setDisplayPosition(london, 16); 
     Map<String, Integer> rates = new HashMap<>(); 
     rates.put("London", 42); 
     for (Map.Entry<String, Integer> entry : rates.entrySet()) { 
      map.addMapMarker(new RateCircle(entry, london)); 
     } 
     f.add(map); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private static class RateCircle extends MapMarkerCircle { 

     private static final int R = 12; 
     private Map.Entry<String, Integer> entry; 

     public RateCircle(Map.Entry<String, Integer> entry, Coordinate coord) { 
      super(null, "", coord, R, STYLE.FIXED, getDefaultStyle()); 
      this.entry = entry; 
      Style style = getStyle(); 
      style.setBackColor(Color.cyan); 
      style.setColor(Color.red); 
     } 

     @Override 
     public void paintText(Graphics g, Point position) { 
      super.paintText(g, position); 
      g.drawString(entry.getKey(), position.x + R + 2, position.y + R); 
      g.drawString(entry.getValue() + " kb/s", position.x + R + 2, 
       position.y + R + g.getFontMetrics().getHeight()); 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new RateCircleTest()::display); 
    } 
} 
+1

Danke, ich werde diese gehen geben und lassen Sie wissen, wie ich bekomme auf! – swilson1995