Java 将零部件保持在BoxLayout中的固定位置

Java 将零部件保持在BoxLayout中的固定位置,java,swing,layout-manager,boxlayout,Java,Swing,Layout Manager,Boxlayout,我有一个JPanel,它使用水平框布局,并包含一个JLabel,我希望它保持在与JPanel中其他组件设置VisibleFalse完全相同的位置。当前,当其他组件不可见时,JLabel向左移动 最简单的方法是什么 编辑:添加图片 这就是JPanel在所有组件都可见时的样子 当我将右侧的三个JTextFields设置为不可见时,设置为text X的JLabel向左移动,如下所示: 但我希望它能保持原样: EDIT2:我实际上在使用NetBeansGUI编辑器的免费设计来实现这个特定的JLabel。

我有一个JPanel,它使用水平框布局,并包含一个JLabel,我希望它保持在与JPanel中其他组件设置VisibleFalse完全相同的位置。当前,当其他组件不可见时,JLabel向左移动

最简单的方法是什么

编辑:添加图片

这就是JPanel在所有组件都可见时的样子

当我将右侧的三个JTextFields设置为不可见时,设置为text X的JLabel向左移动,如下所示:

但我希望它能保持原样:

EDIT2:我实际上在使用NetBeansGUI编辑器的免费设计来实现这个特定的JLabel。我为这个错误感到抱歉-我最近使用了很多BoxLayouts,我感到困惑

当前,当其他组件不可见时,JLabel向左移动

是的,布局管理器设计为仅处理可见组件。我不确定是否有任何默认布局管理器可以工作,但我会考虑使用GridBagLayout,因为此布局基于网格结构,因此只要该网格中的组件位于另一行上,标签就不会移动

否则,可以使用CardLayout在面板中显示其他组件。然后,不用使零部件不可见,而是用空面板交换面板

有关更多信息和工作示例,请阅读上Swing教程的部分

编辑:

根据您的图片,最简单的解决方案是使用胶水:

panel.add(Box.createHorizontalGlue);
panel.add(xLabel);
现在标签总是显示在面板的最右边。有关胶水的更多信息,请阅读上的教程

当前,当其他组件不可见时,JLabel向左移动

是的,布局管理器设计为仅处理可见组件。我不确定是否有任何默认布局管理器可以工作,但我会考虑使用GridBagLayout,因为此布局基于网格结构,因此只要该网格中的组件位于另一行上,标签就不会移动

否则,可以使用CardLayout在面板中显示其他组件。然后,不用使零部件不可见,而是用空面板交换面板

有关更多信息和工作示例,请阅读上Swing教程的部分

编辑:

根据您的图片,最简单的解决方案是使用胶水:

panel.add(Box.createHorizontalGlue);
panel.add(xLabel);

现在标签总是显示在面板的最右边。有关胶水的更多信息,请阅读上的教程。

如果可以,请提供预期视图的草图,这将真正帮助我们提供真实的答案:-是的,这是个好主意。我已经编辑了这篇文章。让GUI组件出现和消失对用户不友好。启用和禁用JTextFields会更好。@GilbertLeBlanc我通常会同意,但这是一个教育工具,让JTextFields消失是功能的一部分。所以这不是关于“固定”位置,而是最后一个“X”组件应该保持在右边缘?只需在“X”组件前插入一个右键。如果可以,请提供预期视图的草图,这将真正帮助我们提供真实答案:-是的,这是一个好主意。我已经编辑了这篇文章。让GUI组件出现和消失对用户不友好。启用和禁用JTextFields会更好。@GilbertLeBlanc我通常会同意,但这是一个教育工具,让JTextFields消失是功能的一部分。所以这不是关于“固定”位置,而是最后一个“X”组件应该保持在右边缘?只需在“X”组件前插入一个右键。请参阅我的编辑2。我真的很抱歉弄错了。现在我意识到我在使用自由设计,回答我的问题可能会更难。我可以用一个方框布局重新开始。@notnek,它不会改变我的答案。是的,您应该使用BoxLayout或其他布局管理器。胶水仍然是BoxLayout的解决方案。请参见我的编辑2。我真的很抱歉弄错了。现在我意识到我在使用自由设计,回答我的问题可能会更难。我可以用一个方框布局重新开始。@notnek,它不会改变我的答案。是的,您应该使用BoxLayout或其他布局管理器。胶水仍然是BoxLayout的解决方案。