有一些问题。

构建了必须逐步使用的小程序。在每个步骤之后,单击一个按钮,下一步应添加到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);
}


按钮动作监听器

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

最佳答案

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

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




JComponent.revalidate()的API文档:


  验证此容器及其所有子组件。
  
  支持延迟自动布局。
  
  调用invalidate,然后将此组件的validateRoot添加到需要验证的组件列表中。调度所有当前待处理的事件后,将进行验证。换句话说,在调用此方法之后,将验证在向上浏览此组件的包含层次结构时发现的第一个validateRoot(如果有)。默认情况下,JRootPane,JScrollPane和JTextField从isValidateRoot返回true。
  
  当属性值更改,从而影响了此组件的大小,位置或内部布局时,将在此组件上自动调用此方法。这种自动更新与AWT不同,因为程序通常不再需要调用validate来获取要更新的GUI内容。 validate方法用于使容器再次布置其子组件。显示容器后,修改此容器的子组件(添加到容器中或从容器中删除,或更改与布局有关的信息)时,应调用该方法。

09-27 05:55