我希望创建一个JPanel,可以添加文本字段最少1个最多12个。(因此,我决定创建一个足够大的JPanel,以包含6行2列中的12个文本字段)。这取决于用户选择了多少复选框。此外,这些文本字段应该在该JPanel中以从上到下和左对齐的形式出现。每当这些复选框中的一个被取消选中时,指定的文本字段将从JPanel中删除,并且其余的文本字段将移动到这个空白区域(向上移动以覆盖其空间)。
因此,我只在需要时创建文本字段,而不是一开始就创建所有文本字段并设置setVisible(false)。我认为这是更好的解决方案。
例如:
(我不在意这个按钮出现在哪里,重要的是它应该出现在此面板中现有按钮之后)
因此,我只在需要时创建文本字段,而不是一开始就创建所有文本字段并设置setVisible(false)。我认为这是更好的解决方案。
例如:
//each JTexyField have the same size
JPanel panel = new JPanel(new LayoutManager()); //in my case BoxLayout
If(checkboxEuro == chcecked) {
JTextField fieldEuro = new JTextField();
panel.add(fieldEuro);
}
else if(checkbox2 == ...) panel.add(fieldDolar);
...
If(checkboxDolar = = unchecked) panel.remove(fieldDolar);
(我不在意这个按钮出现在哪里,重要的是它应该出现在此面板中现有按钮之后)
我得到了什么
如果JPanel底部没有足够的空间,LM应该从顶部开始在下一列中添加此文本字段。在这个例子中,如果我试图添加另一个(第7个)文本字段,并且在这列中没有足够的空间,它应该出现在顶部的第二列中,但实际上并没有。当我使用BoxLayout时,第7个文本字段只出现在JPanel上半部分。
我该怎么办?更改布局管理器,还是可能有选项不允许超出JPanel的边界?(这是最重要的)
我得到了这个图片:,而想要的是这个:
----编辑---
如果我们误解了:让我弄清楚,我正在寻找在不同的LM中帮助我“滚动”行的方法/选项,如果没有空间添加TextField(例如,在此示例中为第7个),则应将其移动到上一个(列)顶部。我没有定义2列,但此JPanel的区域让我想象有一个空间,可容纳2列JTextField。当我添加所有12个字段并删除第二个字段时,其余的字段应向上移动以覆盖此空间。
1 4 2 5
2 5 remove 1 3 6
3 6 4