Как выровнять компоненты по центру в JPanel с помощью GridBagLayout?

Когда я пытаюсь выровнять свой компонент, он идет либо влево, либо вправо.

Так что я просто хочу решение, чтобы избавиться от этой проблемы, а также подскажите, как установить размер панели 400 х 350 пикселей.

введите здесь описание изображения

Вот мой код....titleLabel и ResultLabel должны быть выровнены по центру

public TimeGui() {

    layout = new GridBagLayout();
    setSize(400, 350);  //**Its not working**
    setBackground(Color.LIGHT_GRAY);
    setBorder(BorderFactory.createLineBorder(Color.BLACK));
    setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion") );

    setLayout(layout);
    layoutConstraints = new GridBagConstraints();       
    textField1 = new JTextField(10);
    textField2 = new JTextField(10);

    String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"};


    comboBox1 = new JComboBox<>(names1);
    comboBox2 = new JComboBox<>(names1);

    titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER);
    resultLabel = new JLabel("Result Label");
    equalLabel = new JLabel("=");

    convertButton = new JButton("Convert");


    layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
    Insets inset = new Insets(10, 10, 10, 10);
    layoutConstraints.anchor = GridBagConstraints.CENTER;

    addComponent(titleLabel, 0, 0, 2, 2, inset ); // I tried (0,1,2,2) 



    addComponent(comboBox1, 3, 0, 2, 3, inset);

    addComponent(comboBox2, 3, 2, 2, 3, inset);

    addComponent(textField1, 6, 0, 1, 2, inset);

    addComponent(equalLabel, 6, 1, 1, 2, inset);

    addComponent(textField2, 6, 2, 1, 2, inset);

    addComponent(resultLabel, 8, 1, 2, 1, inset);

    addComponent(convertButton, 10, 0, 2, 2, inset);

}

private void addComponent(Component component, int row,
        int column, int width, int height, Insets inset1) {
    layoutConstraints.gridx = column;
    layoutConstraints.gridy = row;
    layoutConstraints.gridwidth = width;
    layoutConstraints.gridheight = height;
    layoutConstraints.insets = inset1;
    layout.setConstraints(component, layoutConstraints);
    add(component);
}
}

person Zakir Hussain    schedule 14.06.2013    source источник
comment
В отсутствие изображения было бы разумно предоставить хотя бы один SSCCE , чтобы хотя бы запустить его без каких-либо дополнений. Просто загрузите свое изображение на любой сайт, например imgur, dropbox или 4shared. Любой человек с более высокими привилегиями добавит это к вашему вопросу.   -  person nIcE cOw    schedule 14.06.2013
comment
хорошо, просто скажите мне, как установить размер панели.   -  person Zakir Hussain    schedule 14.06.2013


Ответы (1)


Проблема в ваших свойствах gridwidth и fill...

введите здесь описание изображениявведите здесь описание изображения

В общем, все, что я изменил, это...

addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2) 
addComponent(comboBox1, 3, 0, 1, 3, inset);
addComponent(comboBox2, 3, 2, 1, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
layoutConstraints.fill = GridBagConstraints.NONE;
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset);
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset);

Вы могли бы поиграть с некоторыми из других.

Что касается определения фактического размера панели, лучшее, что вы можете сделать, это переопределить метод getPreferredSize метода TimeGui...

@Override
public Dimension getPreferredSize() {
    return new Dimension(400, 350);
}

Который будет «предлагать» родительскому контейнеру, какой размер вы хотели бы выложить. Просто помните, что это необязательное значение, и менеджеры компоновки имеют право игнорировать его.

person MadProgrammer    schedule 14.06.2013
comment
Это зависит от того, какой менеджер компоновки вы используете для его отображения. Начните с переопределения getPreferredSize, как указано в нижней части моего ответа. - person MadProgrammer; 14.06.2013
comment
Здравствуйте, MadProgrammer, я все еще пытаюсь установить размер компонента. - person Zakir Hussain; 14.06.2013
comment
Я написал метод getPreferredSize для Jpanel, но не могу писать для компонентов. Как мне это решить... - person Zakir Hussain; 14.06.2013