JPanel的孩子JPanel并不总是与其父母重新粉饰?

时间:2014-10-02 12:05:46

标签: java swing jpanel paintcomponent null-layout-manager

我有一个扩展JPanel的类。当调用此类的默认构造函数时,它会将JPanel的布局设置为null。该类的一个实例被添加到使用BorderLayout的JFrame中。然后我创建了这个类的另一个实例(这次用setBounds设置它的大小和位置)并将它添加到我的第一个这个类的实例,然后将第一个实例添加到JFrame。线程将定期在JFrame上调用重绘。这可以正常工作,直到JFrame的大小调整为最小。当我这样做时,没有任何组件调用paintComponent方法,但是当我增加JFrame的大小时,只有父JPanel(布局由BorderLayout处理的那个)的paintComponent方法被调用。在JFrame达到相当大的尺寸(至少300x300像素)之前,不会调用子JPanel的paintComponent方法。奇怪的是,我可以逐渐调整JFrame的大小,并且将调用两个JPanel的paintComponent方法,直到JFrame再次达到其最小大小。 所以问题是:为什么每次调用父JPanel的paintComponent方法时都不调用我的第二个JPanel的paintComponent方法。这是扩展JPanel的类的paintComponent方法,涉及JPanels的实例是:

   @Override protected void paintComponent(Graphics g) {
    if (!scaleValid) {
      scaleWidget();
    }

    if (this instanceof Updatable) {
      ((Updatable) this).onUpdate();
    }

    super.paintComponent(g);
    g.drawImage(activeImage, getWidth(), getHeight(), this);
  }

0 个答案:

没有答案