Java 编辑面板后是否将面板读入布局?

Java 编辑面板后是否将面板读入布局?,java,layout,awt,panels,Java,Layout,Awt,Panels,我试图做的是动态编辑一个面板,并将其读取到(边框)布局中。面板包含文本字段,我希望用户能够向面板添加或删除文本字段。我尝试的是:从布局中删除面板,向面板添加另一个文本字段,将面板读取到布局中。但是,这不起作用(什么都没有发生;只有面板被移除,但没有读取其中的新文本字段,因此该区域只是空的)。即使我从布局中删除了面板,然后在该位置(BorderLayout.EAST)向布局中添加了另一个组件;什么也没发生(只是空的) 这是代码中不起作用的部分: vfields[blocks] = new Text

我试图做的是动态编辑一个面板,并将其读取到(边框)布局中。面板包含文本字段,我希望用户能够向面板添加或删除文本字段。我尝试的是:从布局中删除面板,向面板添加另一个文本字段,将面板读取到布局中。但是,这不起作用(什么都没有发生;只有面板被移除,但没有读取其中的新文本字段,因此该区域只是空的)。即使我从布局中删除了面板,然后在该位置(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
vfields[blocks]=新文本字段(“0”)//将新textfield添加到textfields数组中
块+=1;
dp.blocks=块;
删除(值\字段)//从borderlayout中删除“值\字段”面板
添加(vfields[blocks])//将新组件textfield添加到面板

添加(值\字段,BorderLayout.EAST)//将面板读取到边框布局看起来它不会再次重新绘制。 您是否尝试在gui更改后调用以下两种方法:

  validate();
  repaint();

无需拆下整个面板。只需将零部件删除/添加到现有面板中即可。在可见GUI上,代码的顺序为:

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

如果您需要更多帮助,请发布您的

是的,当我在GUI更改后调用这些方法时,它仍然没有显示任何内容。就好像它只是从borderlayout中删除了panel value_字段,因为它在该位置仍然是空的。有什么想法吗?嗨,我试过了,它可以从面板上移除组件。但是,当我尝试以这种方式向面板动态添加组件时,它不起作用。工作:值\字段。删除(vfields[blocks-1]);values_fields.validate();值_字段。重新绘制();不起作用:values_fields.add(vfields[blocks]);values_fields.validate();值_字段。重新绘制();更新:在使用add方法的部分,我似乎得到了一个Java NullPointerException:values\u fields.add(vfields[blocks])。怎么了?如果在添加组件时它不起作用,那么可能是因为您使用的布局管理器要求您指定约束。例如,当您使用IDE创建表单时,就会发生这种情况。大多数IDE使用GroupLayout,这要求您指定多个约束。我的建议是转储IDE并自己编写表单代码,这样您就知道如何添加组件以及如何指定所需的约束;使用你的方法。我犯了一些愚蠢的错误:我引用了我创建的对象(vfields[blocks]),与我创建它的方式相同(使用块的值作为索引),但在创建对象和使用它之间,我增加了块的值,这使它引用了一个不存在的对象,所以我把int块的增加移到后面,现在开始工作了。谢谢!