当前位置: 首页 > 知识库问答 >
问题:

MapMarkerCircle中的新行,JMapViewer

秦育
2023-03-14

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

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

下面是出现问题的一小段代码。注意“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]);

共有1个答案

李开宇
2023-03-14

MapMarkerCircle::Paint调用MapMarkerCircle::PaintText,后者调用Graphics::DrawString,这对控制字符或标记没有特殊意义。从这个示例开始,下面painttext()的实现在第一行下面绘制了第二行。

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

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);
    }
}
 类似资料:
  • 问题内容: This is my statement one.\n This is my statement2 我尝试了两者,但是渲染html文件时新行没有反映出来。我怎样才能做到这一点? 问题答案: 试试这个: 换行符和回车符是HTML实体Wikipedia。这样,您实际上是在分析新行(“\ n”),而不是将其显示为文本。

  • 问题内容: 如何在JavaScript警报框中添加新行? 问题答案: 将放入新行- 作为新行的控制代码。

  • 问题内容: 正如我已经发现的那样,可以通过执行类似的操作在一个查询中更新多行 特别感谢@Roman Pekar的明确回答。 现在,我正在尝试将这种更新与查询合并到NodeJS中的postgreSQL数据库中。 这是我的代码片段: 我没有收到错误,但是它不会更新我的表,我真的不知道这里出了什么问题。查询代码中可能存在语法错误?我只是在NodeJS pg包中更新时找不到多行查询的任何特定示例 问题答案

  • 问题内容: 我正在将SQLAlchemy与python结合使用,并且我想更新等于此查询的表中的特定行: 我通过sql alchemy编写了此代码,但无法正常工作: 返回此错误: 我该怎么做? 问题答案: 通常,您不使用,而是设置属性:

  • 我试图在我的文本字段中有一些预定义的文本,但是我不知道如何在单词之间添加新行。我试过了\n,但不起作用。 代码: 有人知道如何在每个单词之间添加换行符吗?我希望单词之间有一个分离,然后它会在稍后自动填充信息。

  • 问题内容: 我已经编写了以下代码: 现在,我想插入一条新行,就像您通常要插入的那样,但是它似乎不起作用。 如何解决这个问题? 谢谢。 问题答案: 如果要获取当前操作系统(例如Windows)中使用的 换行符,可以通过以下方式获取它们 从Java7开始 或如Stewart所述,通过 您还可以使用及其方法,该方法将在字符串的末尾自动添加与OS相关的行分隔符 (BTW 也是PrintStream的实例)