Java/Swing表单中动态添加字段

4

我对Java和使用NetBeans设计UI都很新手。

我的目标是...

在表单中,有一个jComboBox和一个JTextField,用户可以输入他选择的服务和观察结果。到目前为止还不错。jComboBox是从数据库条目中填充的。

问题是,用户可以一次输入N个不同的服务(复选框太多了)。我考虑添加一个"[+]"按钮(以及一个"[-]"用于删除)。因此,用户点击[+],另一行具有jcombobox + jtextfield的新行将出现在前面的下方。

我卡在这一点上。在[+]按钮ActionPerformed中,我只能克隆并添加先前的节点。有什么想法吗?

我的背景是Web开发。用JavaScript做这件事会非常快。好吧,我想你已经知道我想做什么了。等待一些指示。谢谢。

2个回答

9
您正在正确的方向上努力。这里有一些源代码,它可以给您提供一些思路alt textalt text
基本思路是EntryList负责跟踪要显示的行;每行都有一个加号/减号按钮,然后将实际的添加/删除委托给此EntryList。还公开了禁用减/加按钮的方法,以便列表视图可以确保您不会删除单个条目(这样您就不会得到一个空的显示)。
这并不完美;您会注意到需要调整框架大小才能使新行正确显示。但这应该足以让您开始了解。

2
老天,那正是我正在寻找的!非常感谢! - Davis Peixoto

1
创建主面板以使用布局管理器水平显示组件。Box类很容易实现这一点。然后,您只需创建一个包含要显示的组件的新面板,并将此面板添加到您的主面板中。类似于以下内容:
JComboBox checkBox = new JComboBox(...);
JTextField textField = new JTextField(...);
JPanel row = new JPanel();
row.add( comboBox );
row.add( textfield );
mainPanel.add( row );
mainPanel.revalidate();

只是一个快速问题,我能否克隆现有的元素(假设它们都在JPanel中,我希望创建此JPanel的克隆),还是不行?我需要编写代码重新创建所有元素吗? - Davis Peixoto
你只需要在你的代码中编写一个方法来创建组件。 - camickr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接