我想创建一个JPanel,我可以在其中添加文本字段 min 1 max 12 。 (所以我决定创建JPanel,它有足够的空间来包含6行和2列中的12个文本字段)。这取决于用户将检查多少个复选框。更多这些文本字段应该在此JPanel中以从左边缘对齐的从上到下出现。每次取消选中其中一个复选框时,指定的文本字段将从JPanel中删除,其余部分移动到此空白区域(向上移动以覆盖其空间)。
所以我在必要时创建文本字段,而不是在开头创建所有文本字段并设置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应该从顶部开始在下一列中添加此文本字段。在这个例子中6x2如果我试图添加另一个(第7个)文本字段,并且在此列中没有足够的空间,它应该出现在顶部的第二列中,但事实并非如此。当我使用BoxLayout时,第7个文本字段在JPanel上显示一半,在上面显示一半。
我该怎么办?更改布局管理器,或者可能有不允许跨越JPanel边界的选项? (这是最重要的)
我得到了这个:,想要这个:
(抱歉语言 - 这是第一次)
----编辑---
如果我们误解了:让我说得对,我正在寻找不同LM中的methot / option,如果没有空间添加TextField,可以帮助我“滚动”行(7) - 在这个例子中),应该移到TOP上的下一个(列)。我没有定义2列,但是这个JPanel的区域让我觉得有一个空间可以容纳2列JTextField。当我添加所有12个字段并删除时,例如第二个其余部分应该向上移动以覆盖此空间
1 4 2 5
2 5 remove 1 3 6
3 6 4
答案 0 :(得分:0)
在知道所有这些复选框值之后,您似乎正在构建JPanel。在这种情况下,只需确定首先需要添加的文本字段数,然后创建布局。为了简化代码,我建议您将复选框元素放在一个数组中。 然后你可以做这样的事情:
JCheckBox[] checkBoxes = new JCeckBox[12];
JTextField[] currencyFields = new JTextField[12];
//Then in your constructor you can initialize the Checkboxes, but not the text fields.
checkBoxes[0] = new JCheckBox("Euros");
checkBoxes[1] = new JCheckBox("Hungarian Forint");
// and so on.
//Compute how many text fields we need:
private int numberOfBoxesChecked() {
c=0;
for(JCheckBox cb : checkBoxes ) {
if(cb.isSelected())
c++;
}
return c;
}
现在,当您构建面板时,可以使用numberOfBoxesChecked()
来确定如何初始化布局。