这是我尝试画线的课程

package gps;
import java.awt.*;
import java.awt.geom.Line2D;
import java.util.*;

import javax.swing.*;

public class RoadMap extends JPanel {

    public void paintComponent(Graphics2D g)
    {
        super.paintComponent(g);
        g.setColor(Color.blue);

        for(int i = 0; i < Graph.getEdges().length; i++)
        {
            Shape s = new Line2D.Double(Graph.vMap.get(Graph.getEdges()[i].i1).x,
                    Graph.vMap.get(Graph.getEdges()[i].i1).y,
                    Graph.vMap.get(Graph.getEdges()[i].i2).x,
                    Graph.vMap.get(Graph.getEdges()[i].i2).y);

            g.draw(s);
        }
    }
}


Graph.vMap.get(Graph.getEdges()[i].i2).xGraph.vMap.get(Graph.getEdges()[i].i2).y访问线端点的xy值,我已经对其进行了测试,并返回了正确的值。但是,与此无关,在我的JFrame中什么也没有显示。尝试用for循环之外的设置值绘制其他行实际上是可行的。

最佳答案

x1 = 43.12929,x2 = 43.12976,y1 = -77.626956,y2 = -77.62679


这些y值在面板之外。 AWT / Swing组件的可见坐标空间从(0, 0)(width-1, height-1)

检查您在哪里计算值。如果您希望(0, 0)成为中心,则需要通过例如Graphics2D#translate(int, int)

此外:

public void paintComponent(Graphics2D g)


如果尝试覆盖paintComponent,则尚未这样做。 paintComponent使用Graphics,而不是Graphics2D

@Override
protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;


尝试覆盖时,请始终使用@Override批注,因为它会导致错误并告诉您是否不是覆盖。请参见https://docs.oracle.com/javase/tutorial/java/IandI/override.html

可能是您打算使用以下方式:

public class RoadMap extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g.create();
        g2.translate(getWidth() / 2, getHeight() / 2);

        g2.setColor(Color.blue);

        for(int i = 0; i < Graph.getEdges().length; i++) {
            Shape s = new Line2D.Double(
                Graph.vMap.get(Graph.getEdges()[i].i1).x,
                Graph.vMap.get(Graph.getEdges()[i].i1).y,
                Graph.vMap.get(Graph.getEdges()[i].i2).x,
                Graph.vMap.get(Graph.getEdges()[i].i2).y);

            g2.draw(s);
        }

        g2.dispose();
    }
}

09-25 20:21