如果我改变当前的窗口尺寸,Gui生成器会重新生成我的迷宫(Java)



给定以下代码:

class Game() {

   private Shell shell;
    public Game(Display display,int level) 
    {

        shell.addPaintListener(new ExmaplePaintListener());
        shell.setText("Basic shapes");
        shell.setSize(900,900);
        shell.setLocation(45, 45);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}

听众:

   private class ExmaplePaintListener implements PaintListener {
        public void paintControl(PaintEvent e) {

            drawMaze(e);
            placeTreasuresInMaze2(e);
            e.gc.dispose();

        }
    }

以及绘制迷宫的方法

  private void drawMaze(PaintEvent e) {
// this method creates a new maze and draw it using GUI Java 
}

我的问题是,在创建迷宫的窗口后,如果我用鼠标更改窗口的尺寸,那么方法drawMaze会在当前窗口中创建一个新的迷宫。这显然是一个错误,那么我的错误在哪里呢?可能与Game类的Constructor有关?

问候Ron

通常,绘制事件发生在调整大小事件之后。因此,如果您使用鼠标甚至通过编程调整大小,则会调用drawMaze()函数。我认为您不应该在drawMaze()中创建迷宫,或者至少进行懒惰的初始化。这是因为每次绘制窗口时都会创建一个迷宫,每当你调整窗口大小、移动窗口、隐藏窗口的某个部分、改变焦点等时都会出现这种情况。

编辑:绘制事件表明显示发生了变化,并且这种变化可能会影响您正在绘制的屏幕部分

  • 在绘画活动中,您只想做一件事:绘画。所以不要称之为垃圾收集。一般来说,调用Gc不是一个好主意,而且在Listener中,它只会破坏性能
  • 该事件不会改变迷宫的状态。所以你应该用一个状态来表示你的迷宫。一部分是固定的,就像墙壁一样,另一侧是可变的,就像迷宫里的特工位置一样。每次修改状态时,都会要求重新绘制
  • 如果跳过绘制事件,屏幕将为空白

例如,如果你的迷宫太大,无法放在屏幕上,你可以使用绘制事件只绘制一个部分,等等。

最新更新