添加到 BorderLayout 时,无法在 JPanel 中左对齐 JLabel
Posted
技术标签:
【中文标题】添加到 BorderLayout 时,无法在 JPanel 中左对齐 JLabel【英文标题】:Can't left align a JLabel within a JPanel when adding to a BorderLayout 【发布时间】:2020-10-02 20:26:24 【问题描述】:这似乎是一件简单的事情,但我无法让它发挥作用。
我有一个BorderLayout
。我想将顶部用作标题栏。我想添加一个带有标签、按钮和其他组件的JPanel
。但是,边框布局的PAGE_START
部分不会左对齐面板。这是我尝试设置对齐方式的地方。
我注意到当我没有在边框布局中添加面板时,直接写JLabel
,默认情况下它是左对齐的。
但这不是我想要的,因为我计划将BoxLayout.X_AXIS
水平放置在BorderLayout.PAGE_START
标题区域中。似乎是合理的做法?
静态方法的Container
窗格参数只是主JFrame
上的单个面板。
public static void addComponentsToPane(Container pane)
JLabel jlabel = new JLabel("I want to left align this inside a JPanel");
// Doesn't work: jlabel.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel jpanel = new JPanel();
//Doesn't work: jlabel.setAlignmentX(Component.LEFT_ALIGNMENT);
jpanel.add(jlabel);
pane.add(jpanel, BorderLayout.PAGE_START);
// Other parts of the BoxLayout (works fine)
JButton button = new JButton("Button 2 (CENTER)");
button.setPreferredSize(new Dimension(200, 100));
pane.add(button, BorderLayout.CENTER);
button = new JButton("Button 3 (LINE_START)");
pane.add(button, BorderLayout.LINE_START);
button = new JButton("Long-Named Button 4 (PAGE_END)");
pane.add(button, BorderLayout.PAGE_END);
button = new JButton("5 (LINE_END)");
pane.add(button, BorderLayout.LINE_END);
即使我告诉面板左对齐标签,它也不会显示为左对齐。
有谁知道我做错了什么?
【问题讨论】:
【参考方案1】:默认情况下,JPanel 使用带有“中心”对齐方式的 FlowLayout
。
如果您希望组件“左”对齐,则需要将面板上的布局设置为使用带有“左”对齐的FlowLayout
。
阅读FlowLayout
API,了解用于设置对齐的正确构造函数。
或者您也可以阅读 How to Use FlowLayut 上的 Swing 教程,该教程提供了构造函数和有效值来指定对齐方式。
【讨论】:
很高兴它有帮助。不要忘记点击复选标记(答案旁边)“接受”答案,这样人们就知道问题已经解决了。 我没有在 JPanel 中使用 FlowLayout。就像我提到的,JPanel 具有 BoxLayout,并且无论我应用到包含 BoxLayout 的 JPanel 的对齐方式如何,JLabel 都会对齐到中心。 @bluejazzshark 我没有在 JPanel 中使用 FlowLayout。 - 基于提供的代码,是的。我第一句话的哪一部分不清楚?我只看到在代码中创建了一个 JPanel。您在哪里更改面板的布局管理器以使用 BoxLayout ???我们的 cmets 只能基于发布的代码。发布正确的minimal reproducible example 证明问题是您认为您正在使用 BoxLayout。以上是关于添加到 BorderLayout 时,无法在 JPanel 中左对齐 JLabel的主要内容,如果未能解决你的问题,请参考以下文章
将 android app bundle 上传到 playstore 时出错。。您的 app bundle 的目标是无法识别的语言 jp
在使用add()方法添加组件到容器时,必须指定将其放置在哪个区域中