You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing中创建红色网格障碍物及单元格赋值问题

解决Java网格中红色障碍物的绘制与赋值问题

我来帮你搞定这个问题!既要把指定区域的网格单元格赋值为1,又要用红色绘制出来,其实分两步走就很清晰:先处理数据赋值,再用fillRect()(比drawRect()更适合填充整个红色单元格)来可视化。

第一步:给指定网格区域赋值为1

首先你需要一个二维数组存储网格状态,比如int[][] grid,用1代表障碍物、0代表普通网格。根据你说的从(1,1)到(5,4)的区域,用嵌套循环遍历这个范围,把对应位置设为1即可:

// 假设网格是1-based坐标(和你描述的(1,1)对应)
int rows = 6; // 至少覆盖到第5行
int cols = 5; // 至少覆盖到第4列
int[][] grid = new int[rows][cols];

// 遍历障碍物区域:行从1到5,列从1到4
for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 4; j++) {
        grid[i][j] = 1;
    }
}

如果你用Java默认的0-based数组索引,那(1,1)对应数组的grid[0][0],这时候循环要改成i从0到4、j从0到3,记得根据你的实际网格逻辑调整。

第二步:用fillRect()绘制红色障碍物

drawRect()是画矩形边框,要填充整个单元格为红色,fillRect()更合适。下面是GUI中绘制网格和障碍物的核心逻辑:

关键知识点:

  • fillRect(int x, int y, int width, int height):参数依次是矩形左上角的x坐标、y坐标、宽度、高度。
  • 单元格位置计算:假设每个单元格边长是cellSize,第row行第col列的单元格左上角坐标是col * cellSize(x轴)、row * cellSize(y轴),宽高都是cellSize。
  • 绘制前要先设置颜色:g.setColor(Color.RED),再调用fillRect()。

完整示例代码

这里写一个简单的JPanel子类,实现带红色障碍物的网格绘制:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;

public class GridWithObstacles extends JPanel {
    private int[][] grid;
    private final int cellSize = 50; // 单元格大小,可按需调整

    public GridWithObstacles() {
        // 初始化网格并设置障碍物
        int rows = 6;
        int cols = 5;
        grid = new int[rows][cols];
        
        // 给(1,1)到(5,4)的单元格赋值为1(1-based坐标)
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 4; j++) {
                grid[i][j] = 1;
            }
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        // 先绘制所有网格的黑色边框
        g.setColor(Color.BLACK);
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                g.drawRect(j * cellSize, i * cellSize, cellSize, cellSize);
            }
        }

        // 绘制红色障碍物单元格
        g.setColor(Color.RED);
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                if (grid[i][j] == 1) {
                    // 填充整个单元格
                    g.fillRect(j * cellSize, i * cellSize, cellSize, cellSize);
                    // 可选:填充后补画黑色边框,让网格线更清晰
                    g.setColor(Color.BLACK);
                    g.drawRect(j * cellSize, i * cellSize, cellSize, cellSize);
                    g.setColor(Color.RED);
                }
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Grid with Red Obstacles");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new GridWithObstacles());
        frame.setSize(300, 350); // 根据网格大小调整窗口尺寸
        frame.setVisible(true);
    }
}

代码说明:

  1. 初始化网格时,严格按照你要求的(1,1)到(5,4)范围设置了障碍物标记1。
  2. paintComponent方法先绘制所有网格的黑色边框,再遍历网格,遇到值为1的单元格就用红色填充,最后补画黑色边框(可选操作,让网格结构更清晰)。
  3. 修改cellSize可以调整单元格的大小,适配不同的展示需求。

内容的提问来源于stack exchange,提问作者Encipher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:28:47