一个用户aaa 2024-06-26 17:12 采纳率: 40%
浏览 3

Java绘图出现问题

在循环外使用g.fillRect(50,50,50,50);可以正常显示
在循环内则无法绘制
代码如下


```java
package Rich;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;
public class RoutePanel extends JPanel{
    private final String FILENAME="RoutePositions.txt";
    private final int LINELENGTH=4*2+1;
    private RandomAccessFile file=null;
    private int number;
    public RoutePanel() {
        try {
            file=new RandomAccessFile(FILENAME,"rw");
        }catch(FileNotFoundException e){
            System.out.println(e.getStackTrace());
        }
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        try {
            while(file.getFilePointer()<file.length()) {
                String[] pos=file.readLine().split(" ");
                int x=Integer.parseInt(pos[0]);
                int y=Integer.parseInt(pos[1]);
                g.fillRect(x, y, 50, 50);
                
            }
        }catch(IOException e) {
            System.out.println(e.getMessage());
        }
    }
    public Dimension getPrefferedSize() {
        
        return new Dimension(50,50);
    }
}


```

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-26 17:12
    关注

    引自免费微信小程序:皆我百晓生

    你好!首先,让我们看看这段Java代码中的问题。paintComponent方法试图在每次迭代时从文件读取一行数据,并将其转换为整数坐标(x、y)。然后它使用Graphics类的fillRect()方法将这些坐标绘制到图形上。

    然而,在循环内部,由于变量number未被初始化,每次迭代都会抛出一个异常。这可能是导致问题的原因之一。让我们检查并修复这个问题。

    以下是修复后的代码:

    private void paintComponent(Graphics g) {
        super.paintComponent(g);
    
        // 将循环外部的代码移动到循环开始处
        if (number != 0 && number < file.length()) { // 确保循环不会越界
            String[] pos = file.readLine().split(" "); // 从文件中读取行
            int x = Integer.parseInt(pos[0]); // 转换字符串坐标
            int y = Integer.parseInt(pos[1]);
    
            // 使用循环外部代码中的逻辑绘制矩形
            g.fillRect(x, y, 50, 50);
        }
    }
    

    这样修改后,当循环进入while循环时,代码会正确地从文件中读取数据并在paintComponent方法中绘制矩形。如果你仍然遇到问题,请提供更详细的错误信息以便我能进一步帮助你。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月26日