GridBagLayout, почему третий столбец больше? - PullRequest
1 голос
/ 10 марта 2019

Я пытаюсь сделать кнопки одинаково широкими, и вместе они должны быть такими же широкими, как JTextField над ними.код:

window.setLayout(new GridBagLayout());
GridBagConstraints gb = new GridBagConstraints();

gb.gridx = 0;
gb.gridy = 0;
gb.gridwidth = 3;
gb.fill = GridBagConstraints.HORIZONTAL;
gb.gridwidth = GridBagConstraints.REMAINDER;
window.add(text,gb); //adds JTextField

gb.gridwidth = 1;
gb.gridy++;
window.add(one,gb); //adds JButton
gb.gridx++;
window.add(two,gb); //adds JButton
gb.gridx++;
window.add(three,gb); //adds JButton

Screenshot

Когда я использую gb.gridwidth = GridBagConstriants.RELATIVE;, это происходит:

Screenshot

Заранее спасибо.

1 Ответ

1 голос
/ 10 марта 2019

Этого можно добиться, установив GridBagConstraints.weightx = 1.0 для кнопок.

Еще одна ключевая вещь, на которую следует обратить внимание, это то, что я добавил текстовое поле и кнопки к JPanel, а затем добавил JPanel к содержимомупанель JFrame.Я не добавил текстовое поле и кнопки непосредственно на панель содержимого.

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

public class EqualWidthButtons
{
  public static void main(String[] args)
  {
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    GridBagConstraints gb = new GridBagConstraints();
    gb.gridx = 0;
    gb.gridy = 0;
    gb.gridwidth = 3;
    gb.fill = GridBagConstraints.HORIZONTAL;
    panel.add(new JTextField(20), gb);

    gb.gridwidth = 1;
    gb.gridy++;
    gb.weightx = 1.0; // This is the important line
    panel.add(new JButton("1"), gb);

    gb.gridx++;
    panel.add(new JButton("2"), gb);

    gb.gridx++;
    panel.add(new JButton("3"), gb);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new GridBagLayout());
    frame.getContentPane().add(panel, new GridBagConstraints());
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}

Вывод:

enter image description here

...