Компоненты GridBagLayout не выравниваются - PullRequest
0 голосов
/ 08 октября 2018

Я недавно работал с менеджером макетов GridBagLayout и столкнулся с проблемами, когда речь заходит о используемой им сеточной системе.

Я хочу создать JButton, который я создаю здесь.:

    JButton myButton = new JButton("Some text");

    gc.gridx = 2;
    gc.gridy = 4;
    gc.weightx = 0.5;
    gc.weighty = 0.5;

    jp.add(myButton, gc);

Чтобы быть на 2 столбца и на 4 строки ниже с кодом:

gc.gridx = 2 gc.gridy = 4

Я определяю количество столбцов и строкв компоненте (JPanel) здесь:

GridBagConstraints gc = new GridBagConstraints();
    gc.gridwidth = 2;
    gc.gridheight = 10;

Однако, я получаю следующее:

enter image description here

Компонентыперекрываются, несмотря на то, что находятся в явно разных разделах.Буду признателен за любую оказанную помощь.Вот полный код:

package com.UI;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class UserInterface{

public static void main(String[] args) {


    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {

            JFrame f = createFrame();

            JPanel jp = createPanel();

            addLabelAndText(jp);

            f.add(jp, BorderLayout.WEST);

        }

    });



}



static JFrame createFrame() {
    JFrame f = new JFrame();

    f.setLayout(new BorderLayout());


    f.setSize(new Dimension(600, 600));
    f.setVisible(true);

    f.setLocationRelativeTo(null);

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    return f;
}


static JPanel createPanel() {

    JPanel jp = new JPanel();

    jp.setBackground(Color.gray);

    jp.setLayout(new GridBagLayout());


    Dimension size = jp.getPreferredSize();
    size.width = 200;

    jp.setPreferredSize(size);

    jp.setBorder(BorderFactory.createEtchedBorder());


    return jp;

}

static void addLabelAndText(JPanel jp) {//How to call a type represented by the passed String? JLabel, for example?

    GridBagConstraints gc = new GridBagConstraints();
    gc.gridwidth = 2;
    gc.gridheight = 10;

    JTextField jtb = new JTextField(5);

    JLabel jl = new JLabel("Enter input here: ");


    gc.gridx = 2;
    gc.gridy = 0;
    gc.weightx = 0.5;
    gc.weighty = 0.5;

    gc.anchor = GridBagConstraints.NORTHEAST;


    jp.add(jtb, gc);

    gc.gridx = 1;
    gc.gridy = 2;
    gc.weightx = 0.5;
    gc.weighty = 0.5;

    gc.anchor = GridBagConstraints.NORTHWEST;
    gc.anchor = GridBagConstraints.FIRST_LINE_END;

    jp.add(jl, gc);

    JButton myButton = new JButton("Some text");

    gc.gridx = 2;
    gc.gridy = 4;
    gc.weightx = 0.5;
    gc.weighty = 0.5;

    jp.add(myButton, gc);


  }


}

Спасибо за любую помощь

...