一个用户aaa 2024-06-26 09: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 09: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方法中绘制矩形。如果你仍然遇到问题,请提供更详细的错误信息以便我能进一步帮助你。

    评论 编辑记录
  • 百锦再@新空间 全栈领域优质创作者 2024-06-26 09:12
    关注

    Gpt辅助回答,我来为你把关

    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 getPreferredSize() { return new Dimension(50, 50);
    }

    在上面的代码中,我做了一些调整,将文件读取和绘制方块的逻辑放在了paintComponent方法中,确保每次重绘都会读取文件并绘制方块。同时在getPreferredSize方法中返回了期望的面板尺寸,这样可以正确显示绘制内容。希望这能解决您的问题。如果还有其他问题请继续提出。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐

    展开全部

    评论 编辑记录
    一个用户aaa 2024-06-26 09:30

    你的方法和我的不是一点区别都没有嘛???

    回复
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部