java - java BoxLayout添加组件动态( two )

  显示原文与译文双语对照的内容

我想创建一个 JPanel,在那里可以添加文本字段最小 1 max 。 ( 所以我决定创建有足够空间在 6行和 2 cols中包含 12个文本字段的JPanel ) 。 这取决于用户将检查多少个复选框。 这些文本字段应该以英镑为代价出现在 top-to-bottom,在这个JPanel中左边缘对齐 。 每次选中这些复选框之一时,指定的文本字段都会移除 of,它的余的都移到这个空空间( shift shift cover它的空间 。) 。

如果需要,我创建文本字段,而不是在开始和 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);



( 我不关心这个按钮出现在哪里,重要的是,这个按钮应该出现在这个面板的现有按钮上。

我得到

如果在rtc的底部没有足够的空间,则在下一列从顶部开始时应该添加这里文本字段。 在本例 6中,如果我试图添加另一个( 7-th ) 文本字段,在这个列中没有足够的空间。 当我使用 BoxLayout 7-th 文本字段时,JPanel和半上的。

我应该做什么更改布局管理器,或者可以能存在不允许跨越rtc界限的选项? ( 这是最重要的)

我知道了 panel picture 1 ,并希望: panel picture 2

( 抱歉,语言是第一次)

-----Edit----

如果我们误解了,请按 : 如果需要的话,我将在不同的窗口中查找 methot/选项,如果没有空格,应该移动到下一个( 列) 上的下一个。 我没有定义 2列,但是这个JPanel区域让我想像一个空间,它容纳 2列的列。 当我添加所有 12个字段并删除例如第二个字段应该移到覆盖这个空间


1 4 2 5


2 5 remove 1 3 6


3 6 4



时间: 原作者:

看起来你正在构造 JPanel,这些复选框值都是已知的。 在这种情况下,只需确定需要添加多少个插件,然后创建布局。 为了简化代码,我建议你将复选框元素放在 array 中。 然后你可以做这样的事情:


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() 来确定如何初始化布局。

原作者:
...