JLabel автоматически центрирует себя внутри GridBagLayout - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь создать пользовательский JTextField, который содержит JLabel, поэтому я обернул JTextField и JLabel в пользовательский класс, который расширяет JPanel

Макет JPanel установлен на GridBagLayout, так как мне нужно только разместить 2 компонента вертикально. Вот как это выглядит

enter image description here

Это код, я не могу определить, где я дал указание GridBagLayout центрировать JLabel.

setLayout(new GridBagLayout());
jLabel = new JLabel();
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.VERTICAL;
gbc.gridy = 1;
add(jLabel, gbc);

enter image description here

Я хочу, чтобы JLabel была в том же положении, как показано в GIF. Как мне этого добиться? Также было бы неплохо, если бы кто-нибудь мог указать, какой точный размер текста будет хорошо смотреться на JLabel.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

JLabel не запускается с начала строки и не является центром.Это что-то среднее между

Я не уверен, какой у вас точный код и как вы вкладываете пользовательскую панель в другую панель.

Но, как я упоминал выше, когда у вас странное выравниваниевам нужно убедиться, что каждый компонент имеет одинаковое выравнивание по x, чтобы их можно было выровнять одинаково.

Я не могу воспроизвести вашу проблему, используя простой пример ниже:

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class SSCCE extends JPanel
{
    SSCCE()
    {
        JPanel box = new JPanel();
        box.setLayout( new BoxLayout(box, BoxLayout.Y_AXIS) );
        box.setBorder( new LineBorder(Color.RED) );

        JTextField textField = new JTextField(10);
        //textField.setAlignmentX(JComponent.LEFT_ALIGNMENT);
        System.out.println( textField.getAlignmentX() );
        box.add( textField );


        JLabel label = new JLabel("Some text");
        System.out.println( label.getAlignmentX() );
        box.add( label );

        add( box );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}

Нокак видно из вывода, по умолчанию текстовое поле имеет выравнивание по центру и выравнивание по левому краю метки.Попробуйте выровнять их по левому краю.

0 голосов
/ 16 ноября 2018

Благодаря VGR в комментариях я решил эту проблему, установив привязку на LINE_STARTS

gbc.anchor = GridBagConstraints.LINE_STARTS;

Редактировать: Закончилось использованием BoxLayout, спасибо camickr за ответ с примером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...