gpt4 book ai didi

java - 在 Java Swing 中高效渲染占用网格

转载 作者:行者123 更新时间:2023-11-29 07:16:25 27 4
gpt4 key购买 nike

首先,如果这个问题很基础,请接受我的道歉,我主要了解 C#,但被迫在这个特定项目中使用 Java!

我正在尝试实现一个 GUI 来显示 occupancy grid基于机器人传感器数据。占用网格将非常大,可能多达 1500x1500 个网格正方形,代表每个网格单元约 10cm2 的真实世界面积。

每个网格正方形将简单地存储一个可枚举状态,例如:

  • 未知
  • 空闲
  • 有空
  • 机器人

我只是想找到将其呈现为网格的最佳方式,使用不同的颜色方 block 来描绘不同的网格单元格状态。

我已经实现了一种简单的基本算法来绘制正方形和网格线,但是它在较大的占用网格上表现非常糟糕。当收集到新的传感器数据时,该类中的其他代码每 0.5 秒重新绘制一次窗口,我怀疑性能非常差的原因是我每次都在渲染每个单元格。有没有一种简单的方法可以选择性地渲染这些单元格,我应该将每个单元格包装在一个可观察的类中吗?

我当前的实现:

@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

int width = getSize().width;
int height = getSize().height;

int rowHeight = height / (rows);
int colWidth = width / (columns);

//Draw Squares
for (int row = 0; row < rows; row++) {
for (int col = 0; col < columns; col++) {
switch (this.grid[row][col]) {
case Unexplored:
g.setColor(Color.LIGHT_GRAY);
break;
case Empty:
g.setColor(Color.WHITE);
break;
case Occupied:
g.setColor(Color.BLACK);
break;
case Robot:
g.setColor(Color.RED);
break;
}

g.drawRect(col * colWidth, height - ((row + 1) * rowHeight), colWidth, rowHeight);
g.fillRect(col * colWidth, height - ((row + 1) * rowHeight), colWidth, rowHeight);
}
}

int k;
if (outline) {
g.setColor(Color.black);
for (k = 0; k < rows; k++) {
g.drawLine(0, k * rowHeight, width, k * rowHeight);
}

for (k = 0; k < columns; k++) {
g.drawLine(k * colWidth, 0, k * colWidth, height);
}
}

}


private void setRefresh() {
Action updateUI = new AbstractAction() {
boolean shouldDraw = false;

public void actionPerformed(ActionEvent e) {
repaint();
}
};

new Timer(updateRate, updateUI).start();
}

求助!提前致谢。

最佳答案

关于java - 在 Java Swing 中高效渲染占用网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com