Как мне сделать макеты в строках? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь сделать макет стабилизированным и исправленным.Когда я изменяю размер окна, оно дает мне только одну строку вместо фактического расположения строк.Как сделать аккуратный макет?

Вот мой код:

class BookstoreFrame extends JFrame
{
   JButton btnSubmit;
   JTextField txtISBN, txtTitle, txtAuthor, txtPrice;
   JLabel lblISBN, lblTitle, lblAuthor, lblPrice;
   int count = 0;

   public BookstoreFrame(String title)
   {
      FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 5, 20);
      setLayout(layout);

      lblISBN = new JLabel("ISBN: ");
      txtISBN = new JTextField(10);
      lblTitle = new JLabel("Book Title: ");
      txtTitle = new JTextField(10);
      lblAuthor = new JLabel("Author: ");
      txtAuthor = new JTextField(10);
      lblPrice = new JLabel("Price: ");
      txtPrice = new JTextField(10);

      btnSubmit = new JButton("Submit");
      add(lblISBN);
      add(txtISBN);
      add(lblTitle);
      add(txtTitle);
      add(lblAuthor);
      add(txtAuthor);
      add(lblPrice);
      add(txtPrice);
      add(btnSubmit);
      btnSubmit.addActionListener(new seeTextBookInfo());
   }
}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Как сделать аккуратный макет?

Мы понятия не имеем, что для вас значит "аккуратный"?

Обычно у вас есть пары метка / текстовое поле в одной строке, а затем, возможно, кнопка в отдельной строке.

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

Базовый код может выглядеть примерно так:

setLayout( new GridBagLayout() );
GridBagConstraints gbc = new GridBagConstraints();

gbc.gridx = 0;
gbc.gridy = 0;
add(lblISBN, gbc);

gbc.gridx = 1;
add(txtISBN, gbc);

gbc.gridx = 0;
gbc.gridy = 1;
add(lblTitle);

gbc.gridx = 1;
add(txtTitle);

... // add other components here

gbc.gridx = 0;
gbc.gridy = ?;
gbc.gridwidth = 2;
gbc.anchor = ???
add(btnSubmit);

Прочтите раздел из учебника по Swing на Как использовать GridBagLayout для получения дополнительной информации и примеров, с чего можно начать.,

0 голосов
/ 30 ноября 2018

Вы используете FlowLayout, он добавляет компоненты в одном направлении до тех пор, пока не останется больше места, а затем создает новую строку.

Вы можете использовать BoxLayout, чтобы добавить элементы слева направо: https://docs.oracle.com/javase/8/docs/api/javax/swing/BoxLayout.html

BoxLayout layout = BoxLayout(this, BoxLayout.X_AXIS);
...