Panel.add没有立即?

时间:2012-06-20 13:44:26

标签: java applet panel

遇到了一些问题。

构建一个必须逐步使用的applet。在每个步骤之后,单击一个按钮,下一步应该添加到GUI中。

问题:没有缩放,添加的内容就不会显示。在应用程序中,您可以通过缩放窗口大小来解决,但在applet中我无法解决该问题。

由于

编辑:

实际上,它看起来像这样:

 Panel cp = new Panel(new GridLayout(0,2));
 Panel Block1 = new Panel(new GridLayout(2,2));
 Panel Block1 = new Panel(new GridLayout(2,2));
  ...

初​​始化

 public void init()
  {  

   buildBlock1();
   buildBlock2();


    add(cp);
    cp.setVisible(true);
  }

在这里添加一些空面板,之后会被填满

private void buildBlock1()
{
Block1.add(panel1);
Block1.add(panel2);
Block1.add(panel3);
Block1.add(panel4);

cp.add(Block1);
}

按钮actionlistener

private void generatePanel1()
 {
  //adding some Components to the subpanel of Block1, which is a subpanel of cp.
 Panel1.add(...);
 cp.repaint();
 cp.validate();
 }

1 个答案:

答案 0 :(得分:2)

现在我没有任何可以检查的代码,但是通常需要“验证”向容器中添加(和删除)组件。所以试试

panel.add(...); 
panel.revalidate(); 

JComponent.revalidate()的API文档:

  

验证此容器及其所有子组件。

     

支持延迟自动布局。

     

调用invalidate,然后将此组件的validateRoot添加到需要验证的组件列表中。在调度所有当前挂起的事件之后将进行验证。换句话说,在调用此方法之后,将验证在向上遍历此组件的包含层次结构时找到的第一个validateRoot(如果有)。默认情况下,JRootPane,JScrollPane和JTextField从isValidateRoot返回true。

     

当属性值发生更改以使此组件的大小,位置或内部布局受到影响时,将自动在此组件上调用此方法。这种自动更新与AWT不同,因为程序通常不再需要调用validate来获取GUI的内容以进行更新。 validate方法用于使容器再次布置其子组件。在显示容器后修改此容器的子组件(添加到容器中或从容器中删除,或更改布局相关信息)时,应调用它。