gpt4 book ai didi

java - MapMarkerCircle、JMapViewer 中的新线

转载 作者:行者123 更新时间:2023-11-30 07:16:42 25 4
gpt4 key购买 nike

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

我已经尝试过"\n" ,但这行不通。我尝试将其封装为 html 格式并使用 <br>打破该行,但同样,它只是打印整个内容,就好像它是一个字符串一样。

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

这是发生问题的一小段代码。请注意,“RateCircle”扩展了“MapMarkerCircle”。

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]);

最佳答案

MapMarkerCircle::paint来电 MapMarkerCircle::paintText ,调用 Graphics::drawString ,它没有赋予控制字符或标记特殊的含义。从这里开始example ,执行paintText()下面在第一条线下方绘制第二条线。

我更新了该示例,以建议一种关联标记的名称和值的方法。它使用 Map<String, Integer> ,通过Map.Entry<String, Integer>作为 RateCircle 的参数构造函数。

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);
}
}

关于java - MapMarkerCircle、JMapViewer 中的新线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38263192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com