Java MapMarkerCircle中的新行,JMapViewer

Java MapMarkerCircle中的新行,JMapViewer,java,string,newline,jmapviewer,Java,String,Newline,Jmapviewer,所以我对JMapViewer(和StackOverFlow)是新手。我目前正在尝试的是开发一个网络的实时图形表示,其中背景是该地区的地图。到目前为止进展顺利,但有一个问题困扰着我。当我创建一个MapMarkerCircle并设置名称时,我想创建一个新行,在它下面显示信息 我尝试了“\n”,但这不起作用。我试过用html格式封装它 然后使用来断行,但同样地,它只是像打印字符串一样打印整个内容 如果有人以前遇到过这个问题,我将非常感谢您的帮助 下面是出现问题的一小段代码。请注意,“RateCircl

所以我对JMapViewer(和StackOverFlow)是新手。我目前正在尝试的是开发一个网络的实时图形表示,其中背景是该地区的地图。到目前为止进展顺利,但有一个问题困扰着我。当我创建一个MapMarkerCircle并设置名称时,我想创建一个新行,在它下面显示信息

我尝试了
“\n”
,但这不起作用。我试过用html格式封装它 然后使用

来断行,但同样地,它只是像打印字符串一样打印整个内容

如果有人以前遇到过这个问题,我将非常感谢您的帮助

下面是出现问题的一小段代码。请注意,“RateCircle”扩展了“MapMarkerCircle”

Coordinate dataPoint=new坐标((pmpLinks[i].getRecieverSite().getLat()+pmpLinks[i].getTransmiter().getLat())/2,(pmpLinks[i].getRecieverSite().getLon()+pmpLinks[i].getTransmitter().getLon())/2);
字符串rateStringName=“”+inRateAsString+“
kb/s”; pmpCanopyRatePoints[i]=新的速率圈(allPMPrateLayer[i],rateStringName,dataPoint); map().addMapMarker(pmpCanopyRatePoints[i]);
您可以使用System.lineSeparator():


MapMarkerCircle::paint
调用
MapMarkerCircle::paintText
,它调用
Graphics::drawString
,对控制字符或标记没有特殊意义。从这一点开始,下面的
paintText()
的实现在第一行下面画了第二行

我已经更新了示例,以建议将标记的名称和值关联起来的方法。它使用
Map
,将
Map.Entry
作为参数传递给
ratecycle
构造函数

导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Point;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.JFrame;
导入org.openstreetmap.gui.jmapviewer.Coordinate;
导入org.openstreetmap.gui.jmapviewer.jmapviewer;
导入org.openstreetmap.gui.jmapviewer.MapMarkerCircle;
导入org.openstreetmap.gui.jmapviewer.Style;
/**
*@见https://stackoverflow.com/a/38265252/230513
*@见https://stackoverflow.com/a/33857113/230513
*/
公共类费率测试{
专用void display(){
JFrame f=新JFrame(“伦敦”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMapViewer映射=新的JMapViewer(){
@凌驾
公共维度getPreferredSize(){
返回新尺寸(320240);
}
};
伦敦坐标=新坐标(51.5072,-0.1275);
地图设置显示位置(伦敦,16);
映射速率=新HashMap();
利率。看跌期权(“伦敦”,42);
对于(Map.Entry:rates.entrySet()){
map.addMapMarker(新RateCircle(条目,伦敦));
}
f、 添加(地图);
f、 包装();
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
私有静态类RateCircle扩展了MapMarkerCircle{
专用静态最终整数R=12;
私人地图。入口;
公共费率圈(地图输入、坐标坐标坐标){
super(null,“”,coord,R,STYLE.FIXED,getDefaultStyle());
this.entry=entry;
Style=getStyle();
风格。挫折色(颜色。青色);
style.setColor(Color.red);
}
@凌驾
公共空白绘画文本(图形g,点位置){
super.paintText(g,位置);
g、 抽绳(entry.getKey(),position.x+R+2,position.y+R);
g、 抽绳(entry.getValue()+“kb/s”,位置.x+R+2,
位置.y+R+g.getFontMetrics().getHeight());
}
}
公共静态void main(字符串[]args){
invokeLater(新的RateCircleTest()::display);
}
}

我现在已经试过了,但它似乎仍在做同样的事情,只是在同一行上打印出来谢谢,我会尝试一下,让你知道我的进展!
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]);
String rateStringName = inRateAsString + System.lineSeparator() + "kb/s";
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);
    }
}