2012-06-20 51 views
0

出现了一些问题。Panel.add不立即?

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

按钮的ActionListener

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

你能提供一些代码吗?这将有助于一个小而完整的例子。 – dacwe

+0

你在按下按钮后调用'repaint()'吗?听起来像这可能是你的问题。 – purtip31

+0

实际上我甚至不使用paint()方法,只是将我的应用程序转换为aplet。这是否需要? 更新:甚至没有重绘()它更新得很好 – roqstr

回答

2

现在我没有,我可以检查,但增加(和删除)组件到一个容器通常往往需要进行“验证”的任何代码。因此,尝试

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

API文档JComponent.revalidate()

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

支持延期自动布局。

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

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

+0

刚刚编辑原始帖子,请再看一遍 – roqstr

+0

当我使用eclipse标记applet时,它的工作正常,在FF13中它只是不会更新。 – roqstr

+0

IE不错.. – roqstr