2010-10-30 30 views
0

我想要做的是动态编辑面板并将其读取到(边框)布局。该面板包含文本字段,我希望用户能够向面板添加或删除文本字段。我尝试的是以下内容:从布局中移除面板,向面板添加另一个文本区域,将面板读入布局。然而,这不起作用(没有发生任何事情;只有面板被删除,但没有与其中的新文本区重新读取,所以该区域只是空的)。即使当我从布局中移除面板,然后将另一个组件添加到该位置(BorderLayout.EAST)的布局中时,什么都没有发生(只是空的)。编辑面板后读取面板布局?

这是代码中的哪一个不工作的一部分:

vfields[blocks] = new TextField("0"); //add new textfield to the array of textfields 
blocks += 1; 
dp.blocks = blocks; 
this.remove(values_fields); //remove the values_fields panel from the borderlayout 
values_fields.add(vfields[blocks]); //add new component,textfield to the panel 
this.add(values_fields, BorderLayout.EAST); //readd the panel to the border layout<-- doesn't work 

我希望有人能帮助我。我对Java相对陌生,所以我可能只是在做一些完全错误的事情,但我自己并没有看到它。

在此先感谢!

Skyfe。

回答

0

没有必要删除整个面板。您可以将组件移除/添加到现有面板。在可见的GUI代码的顺序将是:

panel.remove(...); 
panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

如果您需要交的SSCCE更多的帮助。

+0

嗨,我试过了,它可以从面板中移除组件。但是,当我尝试以这种方式动态地向面板添加组件时,它不起作用。 Works: \t \t \t \t \t values_fields.remove(vfields [blocks-1]); \t \t \t \t \t values_fields.validate(); \t \t \t \t \t values_fields.repaint(); 不起作用: \t \t \t \t \t values_fields.add(vfields [blocks]); \t \t \t \t \t values_fields.validate(); \t \t \t \t \t values_fields.repaint(); – Skyfe 2010-10-30 23:49:48

+0

更新:我似乎得到了一个Java NullPointerException异常,我使用add方法:values_fields.add(vfields [blocks])。怎么了? – Skyfe 2010-10-30 23:55:38

+0

如果在添加组件时不起作用,那么可能是因为您使用的布局管理器需要您指定约束。例如,当您使用IDE创建表单时会发生这种情况。大多数IDE使用GroupLayout,它们需要您指定几个约束。我的建议是转储IDE并自己编写表单,以便知道如何添加组件以及如何指定所需的约束。 – camickr 2010-10-30 23:57:48

0

看起来它不会重新绘制。 你有没有尝试过的GUI更改后,以下两种方法调用:

validate(); 
    repaint(); 
+0

是的,当我在GUI更改后调用这些方法时,它仍然不显示任何内容。就好像它只是从borderlayout中删除了面板的value_fields,因为它在那个地方仍然是空的。任何想法? – Skyfe 2010-10-30 18:47:03