我的第一个也就是更简单的问题是,当我将resizable设置为false时,我的JFrame大小搞砸了。例如,这有效:
setSize((this.mapSize * tileSize) + 16, (this.mapSize * tileSize) + 16);
但这并不是:
setSize((this.mapSize * tileSize) + 16, (this.mapSize * tileSize) + 16);
setResizable(false);
如何修复它以便我可以在不改变帧内容位置的情况下禁用重新调整大小。
我的第二个问题是如何改进代码的运行时间。我已经隔离了它在pack()
块中所占用的大部分时间。我有时需要绘制超过一百万个瓷砖,所以单独做一个小时可能需要一个多小时。这是我的代码(注意:Tile只是一个背景颜色的JPanel)
setLayout(new FlowLayout(0, 0, 0));
System.out.println("Generating...");
new Terrain(this.mapSize);
System.out.println("Done \nAdding Tiles...");
for (double[] row : Terrain.tileData) {
for (double d : row) {
int v = (int) (20 - d / 500);
if(v < 0) {
v = 0;
}
else if (v > 20){
v = 20;
}
add(new Tile(v, tileSize));
}
}
System.out.println("Done \nPacking...");
pack();
System.out.println("Done \nRepainting...");
repaint();
System.out.println("Done");