BorderLayout.Center не работает с JPanel - PullRequest
0 голосов
/ 21 апреля 2020
public class BorLay 
{

  BorLay()
  {
      JFrame frame=new JFrame("Connect");
      JPanel panel=new JPanel();
       frame.setLayout(new BorderLayout());
       frame.add(panel,BorderLayout.CENTER);
       panel.add(new JTextField("Click1"));
       panel.add(new JTextField("Click2"));
       frame.setVisible(true);
       frame.setSize(400,500);

  }
  public static void main(String args[])
  {
      new BorLay();
  }
}

Приведенный выше код не работает, когда JPanel добавляется в JFrame. Но если JTextField напрямую добавляется в JFrame, он работает.

1 Ответ

1 голос
/ 21 апреля 2020

Чтобы центрировать панель, содержащую текстовые поля, добавьте ее к GridBagLayout.

enter image description here

Красная граница показывает, как панель, которая содержит их, не стала больше, чтобы заполнить родительский контейнер (панель содержимого).

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

public class BorLay {

    BorLay() {
        JFrame frame = new JFrame("Connect");
        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(Color.RED, 2));
        frame.setLayout(new GridBagLayout());
        frame.add(panel);
        panel.add(new JTextField("Click1"));
        panel.add(new JTextField("Click2"));
        frame.setVisible(true);
        frame.setSize(200, 100); // make bigger as per need
    }

    public static void main(String args[]) {
        new BorLay();
    }
}
...