pack()的替代方案

时间:2015-03-27 19:38:01

标签: java swing jframe

我正在制作一个地形生成器,我正在将超过一百万个JPanel加载到我的框架中,这需要一个多小时。我已经在pack()方法中分离了大部分问题。是否有使用它的替代方案,或者可能更快地完成它?以下是我的一些代码:

    setLayout(new FlowLayout(0, 0, 0));
    System.out.println("Generating...");
    Chunk spawnChunk = new Chunk(this.mapSize);
    System.out.println("Done\nAdding Tiles...");
    for (double[] row : Chunk.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");

注意:平铺只是一个背景颜色的JPanel

1 个答案:

答案 0 :(得分:1)

这是很多JPanels。我的推荐 - 如果&#39; Tile只是一个背景颜色的JPanel,那么只需使用一个JPanel自己进行自定义绘图。覆盖paintComponent方法并使用传递的Graphics对象绘制颜色。

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);  
    for ( int i = 0; i < numberOfTiles; i++ ){
        g.setColor(colorOfCurrentTile);
        g.fillRect(left, top, width, height);
    }
}