java动态地向JDialog添加组件
当用户单击JDialog上的按钮时,我在向JDialog添加JComponents时遇到问题。基本上我希望它看起来像这样:
然后,当用户单击“添加新字段”时,我希望它如下所示:
我似乎无法让对话框添加新的JLabel或JTextField。谁能给我指出正确的方向吗
编辑:这是“添加新字段”按钮的操作(现在只需尝试标签)
@Action
public void addNewField()
{
Container contentPane = getContentPane();
JLabel label = new JLabel ("welkom");
contentPane.add(label, BorderLayout.CENTER);
}
解决方案:
我使用了mre的解决方案并使其发挥作用。这是我的最后一个功能:
@Action
public void addNewField()
{
System.out.println("New Field...");
Container contentPane = getContentPane();
JLabel label = new JLabel ("welcome");
label.setBounds(10,10,100,10); //some random value that I know is in my dialog
contentPane.add(label);
contentPane.validate();
contentPane.repaint();
this.pack();
}
我的另一个问题是,我在NetBeans中使用了“自由设计”布局,这意味着我的标签可能处于某种奇怪的位置,而不是在对话框的边界内(只是猜测)。我用label.setBounds()
解决了这个问题,所以它正好显示了我想要的位置
# 1 楼答案
当从容器中动态添加/删除组件时,需要在之后调用^{} /^{} 和^{} 。前者将强制容器重新布局其组件,后者将删除任何可视的“工件”
# 2 楼答案
为了避免进一步讨论所需/非所需的任何方法
注意:对于添加/删除
JComponents
(一行/一列中的简单结构和相同的Size on Screen
)就足够了,只需执行JFrame.pack()
但对于一些标准的
Swing LayoutManagers
所部署的大多数完整GUI,需要使用一列的示例
# 3 楼答案
我同意mre(他的答案是1+),但我还想补充一点,在添加或删除组件后,您可能需要调用JDialog上的
pack()
,特别是当对话框需要调整大小以适应您的图像所示的组件时编辑1
例如,使用JFrame(但它与JDialog的工作原理相同):