gpt4 book ai didi

java - 添加具有 86,000 个组件的 JPanel

转载 作者:行者123 更新时间:2023-12-02 05:51:07 25 4
gpt4 key购买 nike

所以我找到了Conway's Game of Life最近,自然就上瘾了。没过多久我就发现我的电脑 CPU 非常有限。我还发现,无论出于何种原因,我无法将具有许多 JComponentsJPanel 添加到 JFrame 中。

所以我有一个循环,将86,400 JLabels添加到JPanel,这在大约1秒内发生,但将此 JPanel 添加到 JFrame 大约需要 2 分钟。

我知道我可以使用 java.awt.Graphics,但我更喜欢使用 JLabels,因为它们会自动调整大小。

所以我的问题是:为什么将 JPanel 添加到 JFrame 需要这么长时间,以及如何修复它?

最佳答案

使用java.awt.Graphics,我能够消除这么长的滞后时间:

public void render(int[][] cells) {

int cellHeight = image.getHeight() / cells.length;
int cellWidth = image.getWidth() / cells[0].length;

for (int y = 0; y < cells.length; y++) {
for (int x = 0; x < cells[y].length; x++) {

int col = colors[cells[y][x]].getRGB();
fillSquare(x * (cellWidth), y * (cellHeight), cellWidth, cellHeight, col);
}
}
}

// Could pass a java.awt.Rectangle here
private void fillSquare(int xPos, int yPos, int width, int height, int col) {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
pixels[(x + xPos) + (y + yPos) * image.getWidth()] = col;
}
}
}

@Override
public void paint(Graphics g) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}

对于此方法,保持 JFrame 的大小与单元格数量成比例非常重要,这样 JFrame 内就没有未使用的空间。

关于java - 添加具有 86,000 个组件的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56047811/

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