0

遇到了一些问题。

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

问题:没有缩放,添加的内容不可见。在应用程序中,您可以解决缩放窗口大小的问题,但在小程序中我无法解决该问题。

谢谢

编辑:

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

 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();
 }
4

1 回答 1

2

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

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

API 文档JComponent.revalidate()

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

支持延迟自动布局。

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

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

于 2012-06-20T13:57:14.497 回答