Положение JLabel в JPanel с помощью GridBagLayout - PullRequest
0 голосов
/ 03 января 2019

Идея состоит в том, чтобы создать JLabel внутри JPanel внутри JFrame.Я хочу разместить метку в левом нижнем углу, и я хочу сделать это с GridBagLayout.Я играл с полями GridBagConstraints, но ничего, что я сделал, похоже, не работает.Единственное, что сработало, это изменение отступов для JLayer, но в половине случаев он работал не так, как планировалось.

Вот код:

class Panelz extends JFrame{
JPanel panel = new JPanel();
JLabel label = new JLabel();

public static void main(String[] args){
    Panelz p = new Panelz();
    p.pack();
    p.setVisible(true);
    p.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public Panelz(){
    Dimension scr = new Dimension(500,500);
    this.setPreferredSize(scr);
    Container cont = this.getContentPane();
    cont.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    label.setText("Potato");
    //make panel
    panel.setBackground(Color.red);
    panel.setLayout(new GridBagLayout());

    c.fill=GridBagConstraints.BOTH;
    c.gridx=0;
    c.gridy=0;
    c.weighty=100f;

    panel.add(label,c);

    c.weightx=0.2f;
    c.weighty=0.2f;
    cont.add(panel, c);
}
}

Выходными данными всегда является текст метки в центре панели.

1 Ответ

0 голосов
/ 04 января 2019

Я хочу расположить метку в левом нижнем углу

c.fill=GridBagConstraints.BOTH;

Но вы используете заливку со значением «ОБА», которое кажется.как будто вы пытаетесь сделать так, чтобы метка заполняла всю панель, а не только нижнюю левую.

panel.setBackground(Color.red);

Не устанавливайте цвет панели.Вместо этого установите цвет метки.Тогда вы сможете точно увидеть, как метка измеряется менеджером макета.Что-то вроде:

label.setText("Potato");
label.setOpaque(true);
label.setBackground(Color.BLUE);

Кроме того, нет необходимости устанавливать макет панели содержимого фрейма.

Чтобы лучше понять, как работает GridBagLayout, прочитайте раздел учебника по Swing на Как использовать GridBagLayout .Рабочий пример из учебника показывает, как отобразить компонент на bottom right панели.Вы сможете изменить этот код для отображения компонента на bottom left после прочтения о том, как работают ограничения.

...