java - BoxLayout padding组件动态(两列)

标签 java swing layout-manager boxlayout

我想创建一个 JPanel,我可以在其中添加文本字段 min 1 max 12。 (所以我决定创建 JPanel,它有足够的空间来包含 6 行 2 列的 12 个文本字段)。这取决于用户将选中多少个复选框。更重要的是,在这个 JPanel 中,这些文本字段应该以从上到下的形式出现,并且左边缘对齐。每次取消选中其中一个复选框时,指定的文本字段就会从 JPanel 中删除,其余的将移动到这个空白区域(向上移动以覆盖其空间)。

因此,如果有必要,我会创建文本字段,而不是在开始时全部创建并设置可见(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 边界的选项? (这个最重要)

我明白了:panel picture 1 ,并想要这个:panel picture 2

(抱歉语言不通——这是第一次)

---- 编辑---

以防我们误解了:让我弄清楚,我正在寻找不同 LM 中的方法/选项,如果没有空间添加 TextField(7),它可以帮助我“滚动”行-th 在这个例子中),应该移动到 TOP 的下一个(列)。我没有定义 2 列,但是这个 JPanel 的区域让我觉得有一个空间可以容纳 2 列的 JTextField。当我添加所有 12 个字段并删除时,例如第二个字段应该向上移动以覆盖这个空间

1 4            2 5
2 5  remove 1  3 6
3 6            4

最佳答案

在所有这些复选框值已知之后,您似乎正在构建 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() 来确定如何初始化您的布局。

关于java - BoxLayout padding组件动态(两列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310626/

相关文章:

java - 无法在 JDialog 中设置 JPanel 的大小

java - 自定义 JButton 子类 setIcon 方法不起作用

java - 更改 GridLayout 中两个组件的位置

Java 相当于 GC.SuppressFinalize

java - 将请求范围数据传递给 CDI 中的异步方法

Java swing JTable RowFilter 忽略符号

java - 无法获取两个日期之间的记录

java - JPanels AS 坞站

java - 如果声明没有按计划措辞

java - 数组索引越界异常