【问题标题】:Trying to draw lines based on doubles but nothing shows?试图根据双打绘制线条但没有显示?
【发布时间】:2015-05-03 20:39:32
【问题描述】:

这是我尝试画线的课程

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 循环之外绘制具有设定值的其他线条实际上是有效的。

【问题讨论】:

  • 您正在绘制的线条的典型 xy 值是多少?
  • x1 = 43.12929, x2 = 43.12976, y1 = -77.626956, y2 = -77.62679
  • 由这些值定义的线的端点相差一个像素的一小部分。如果你想看到这么小的线条,你必须对它们进行缩放,使线条的长度变得大于一个像素。

标签: java swing jpanel double graphics2d


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多