Не удается выровнять JLabel по левому краю в JPanel при добавлении в BorderLayout

Это кажется простым делом, но я не могу заставить его работать.

У меня есть 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);
    }

Даже когда я говорю панели выровнять метку по левому краю, она не выглядит выровненной по левому краю.

Кто-нибудь знает, что я делаю неправильно?


person bluejazzshark    schedule 13.06.2020    source источник


Ответы (1)


По умолчанию JPanel использует FlowLayout с выравниванием по центру.

если вы хотите, чтобы компоненты были выровнены по левому краю, вам нужно установить макет на панели, чтобы использовать FlowLayout с выравниванием по левому краю.

Прочтите FlowLayout API, чтобы узнать, какой конструктор использовать для установки выравнивания.

Или вы также можете прочитать руководство по Swing Как использовать FlowLayut который дает конструкторы и допустимые значения для указания выравнивания.

person camickr    schedule 13.06.2020
comment
Рад, что это помогло. Не забудьте принять ответ, нажав на галочку (рядом с ответом), чтобы люди знали, что проблема решена. - person camickr; 13.06.2020
comment
Я не использую FlowLayout в JPanel. Как я уже упоминал, у JPanel есть BoxLayout, и независимо от выравнивания, которое я применяю к JPanel, содержащему BoxLayout, JLabel выравнивается по центру. - person bluejazzshark; 15.06.2020
comment
@bluejazzshark Я не использую FlowLayout в JPanel. - судя по предоставленному коду, да. Какая часть моего первого предложения непонятна? Я вижу только одну JPanel, созданную в коде. Где вы меняете менеджер компоновки панели, чтобы использовать BoxLayout??? Наши комментарии могут основываться только на опубликованном коде. Опубликуйте правильный минимально воспроизводимый пример, демонстрирующий проблему, если вы думаете, что используете BoxLayout. - person camickr; 15.06.2020