添加到 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()方法添加组件到容器时,必须指定将其放置在哪个区域中

BorderLayout布局,修改各个区域大小办法

为什么我的JButton在放入JPanel的构造函数时不显示?

swing之borderlayout

14 线程