与 JPanel Swing 中的限制组件对齐

Posted

技术标签:

【中文标题】与 JPanel Swing 中的限制组件对齐【英文标题】:Align to the limit Components in a JPanel Swing 【发布时间】:2019-05-06 03:25:58 【问题描述】:

我需要将组件与JTextArea 组件完全对齐,我目前使用的是BoxLayout,并且我已经使用了setAlignmentXsetHorizontalAlignment 到LEFT,但它不起作用。在这里,我上传了一张图片以更清楚地表达我的意思。例如查看“+ Pla PLAMARC”,它显然与文本区域组件不对齐。

现在是代码:

//Declarations
private JLabel nomPla;
private JTextArea infoPla;
private JScrollPane textAreaScroll;

//Inside the constructor
nomPla = new JLabel();
infoPla = new JTextArea(2, 50);
textAreaScroll = new JScrollPane(infoPla);

this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

nomPla.setAlignmentX(Component.LEFT_ALIGNMENT);
nomPla.setHorizontalAlignment(nomPla.LEFT);
textAreaScroll.setAlignmentX(Component.CENTER_ALIGNMENT);

this.setBorder(new EmptyBorder(new Insets(25, 25, 25, 25)));

this.add(nomPla, BorderLayout.NORTH);
this.add(textAreaScroll, BorderLayout.NORTH); //Orientacions

我明确告诉nomPla 在左侧,但这与JTextArea 不同。

那么这是怎么做到的呢?

【问题讨论】:

“那是怎么做的?” 你现在怎么样了?为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 使用一个borderLayout并将每个JTextArea组件放在你想要的每个部分(即左边)。 @AndrewThompson 已编辑... @Marc43, already edited - 这不是“MCVE”。我们无法编译该代码并进行测试以查看您描述的行为。 【参考方案1】:

我已经使用了 setAlignmentX 和

如果您希望所有组件与 BoxLayout 保持对齐,则需要将 setAlignmentX(...) 应用于您添加到 BoxLayout 的所有组件。

编辑:

我只希望标签在左侧,而不是 JTextArea 组件..

那么你需要为 BoxLayout Panel 使用一个封装面板。

例如:

JPanel wrapper = new JPanel( new FlowLayout(FlowLayout.CENTER) );
wrapper.add(yourBoxLayoutPanel);
frame.add(wrapper);

现在 BoxLayout 中的所有组件都将左对齐,并且 BoxLayout 面板将在包装器面板中居中对齐。

布局管理是通过嵌套不同的布局管理器来实现你想要的效果。

【讨论】:

我终于用了一个GridBagLayout;但是我可以将您的答案设置为有效(不适用于这种情况),但我需要为每个组件设置对齐以真正看到对齐,仅设置其中一个不起作用。谢谢你,很抱歉给我带来不便。 您的问题是关于 BoxLayout 和组件对齐方式。我解释了为什么您的原始代码不起作用,并提供了解决问题的解决方案。这将使您在将来选择布局管理器时做出更明智的决定。 I finally used a GridBagLayout; - 总是有不止一种布局解决方案。如果您发现为每个组件设置多个约束而不是为每个组件设置对齐方式更容易,那么这是您的选择,但如果一个问题得到了回答,即使您使用不同的解决方案,它也应该被接受。 是的,但问题是如果我无法测试,我无法直接验证您的答案,对吧?但我可以。谢谢。 是的,您可以直接验证我的答案。验证最多需要 20 行代码。您创建一个具有盒子布局的面板。您创建一个标签和文本区域并设置对齐并将它们添加到面板中。然后创建包装器面板并将盒子布局面板添加到其中。最后,将包装面板添加到框架中。完成此操作需要 5 分钟。这就是“MCVE”的重点。了解如何简化问题并理解编程概念,而不是考虑整个应用程序。这样解决问题就会变得容易得多。

以上是关于与 JPanel Swing 中的限制组件对齐的主要内容,如果未能解决你的问题,请参考以下文章

java:限制swing中的JTextField只能输入中文,字母,数字。

如何使 JPanel 中的组件尽可能伸展?

Java 每次把一个Swing组件放在一个JPanel中时,总是放在左边,有啥办法让其放在面板中间?

java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动

Swing:如何在每个组件、JPanel、JButton 等上绘制动画?

如何对齐 JPanel 在另一个 JPanel 下方居中?