Компоненты немного не на своем месте с GridBagLayout - Java Swing

Я разрабатываю свой первый пользовательский интерфейс полностью из кода вручную (без использования какой-либо IDE с перетаскиванием).

Поэтому я столкнулся с проблемой с одной формой. Как вы можете видеть на снимке экрана моего макета: мой макет формы

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

Зеленые тоже немного не выровнены.

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

ИЗМЕНИТЬ

public void layoutComponents()
{
    //add to the layout (what is above )
    setLayout(new GridBagLayout());
    GridBagConstraints gc = new GridBagConstraints(); //class that specifies where goes what we want



    ////////// Insert and Align Labels and Fields //////////


    gc.weightx = 1; // how much space it takes relatively to other cells
    gc.weighty = 1; // how much space it takes relatively to other cells
    gc.fill = GridBagConstraints.NONE;

    //specify to wich side it will stick to
    gc.anchor = GridBagConstraints.LINE_START; // stick to the right hand side

    Insets fivePixels = new Insets(0, 0, 0, 5);// adds 5 pixels of spcae to the right
    Insets zeroPixels = new Insets(0, 0, 0, 0);

    gc.gridx = 0;
    gc.gridy = 0; //y increase downwards
    gc.insets = fivePixels;
    add(dataSourceBoldLabel, gc);

    gc.gridy = 1; //second row
    add(sourceTableLabel, gc);

    gc.gridy = 2;
    add(processDataPeriodLabel, gc);

    gc.gridy = 5;
    add(resultsBoldLabel, gc);

    gc.gridy = 6;
    add(writeResultsToNewTableRadio,gc);

    gc.gridy = 7;
    add(writeResultsToExistingTableRadio, gc);

    gc.gridy = 8;
    add(processDataOptionsLabel, gc);

    gc.gridy = 9;
    add(accessSessionTimeThresholdLabelLabel, gc);

    gc.gridy = 10;
    add(transitionTimeThresholdLabelLabel, gc);







    ///////////     Second Column  X = 1     ////////////


    gc.insets = zeroPixels;
    gc.gridx = 1;


    gc.gridy = 1;
    add(sourceTables, gc);

    gc.gridy = 2;
    add(allRadio, gc);

    gc.gridy = 3;
    add(fromRadio, gc);

    gc.gridy = 4;
    gc.anchor = GridBagConstraints.LINE_END;
    add(toLabel, gc);

    gc.anchor = GridBagConstraints.NORTHWEST;
    gc.gridy = 6;
    add(newTableField, gc);

    gc.gridy = 7;
    add(resultsTables, gc);

    gc.gridy = 9;
    add(accessSessionTimeThresholdField,gc);

    gc.gridy = 10;
    add(transitionTimeThresholdField, gc);

    gc.anchor = GridBagConstraints.NORTHWEST; //push the buttom to the top
    gc.gridy = 15;
    add(start, gc);



    ////////////////// Third Column    X = 2 //////////////////
    gc.gridx = 2;
    gc.gridy = 4;
    add(fromDateField, gc);

    gc.gridy = 5;
    add(toDateField, gc);





    ///////////////// 4th Column    X = 3 /////////////////////
    gc.gridx = 3;
    gc.gridy = 4;
    add(fromTimeField, gc);

    gc.gridy = 5;
    add(toTimeField, gc);


}

}


person dazito    schedule 16.09.2013    source источник
comment
1) Чтобы быстрее получить помощь, опубликуйте SSCCE. 2) Для этого графического интерфейса у меня возникло бы искушение использовать GroupLayout, но это никогда не предназначалось для ручного кодирования.   -  person Andrew Thompson    schedule 17.09.2013
comment
Я отредактировал свой пост, чтобы опубликовать SSCCE.   -  person dazito    schedule 17.09.2013
comment
В 3-м классе почти 250 LOC. Хотя я все еще могу считать 250 строк «достаточно короткими» для SSCCE, многие так не считают. Но это помимо того факта, что требуется 3 раза скопировать/вставить код, чтобы увидеть, как он работает. SSCCE — это всегда один исходный файл. Любой код, состоящий из двух или более исходных файлов, просто «не является SSCCE». Я предлагаю вам а) Не расширяйте фрейм, просто используйте экземпляр. Это помещает код фрейма в main() и избавляет от одного класса. Затем.. b) Поместите main() в конец исходного текста для GBL.   -  person Andrew Thompson    schedule 17.09.2013


Ответы (1)


Я нашел проблему.

Это было на gc.anchor = GridBagConstraints.X, где X — направление. Я использовал разные направления, когда мне нужно было оставить его постоянным или сопоставить столбцы и строку с правильным направлением.

person dazito    schedule 16.09.2013