如何在 GridBagLayout 中设置组件的大小
How to set the component's size inside a GridBagLayout
据我所知,在 GridLayout 和 GrigBagLayout 中调整组件大小真的很难。就我而言,我有一个包含 2 列和 2 行的 GridBagLayout。第一行有 2 个标签,第二行有 2 个扩展 JTable 的组件(类型 Tablero
)。
我的问题是,我无法让这 2 个 JTable 填充 JFrame 直到其底部。我试过 setSize(), setPreferredSize(), setBounds()
... 但它们根本不起作用。我也尝试过 constraints.fill = GridBagConstraints.VERTICAL/SOUTH/CENTER
... 但我什么也没得到。
我也尝试过在 JFrame 中设置 JPanel 的大小,但它不起作用...
这是我的代码:
public static void main(String[] args)
{
JFrame pantalla = new JFrame();
pantalla.getContentPane().setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
JLabel tab1Label = new JLabel("Tablero 1");
JLabel tab2Label = new JLabel("Tablero 2");
Tablero tablero1 = new Tablero();
Tablero tablero2 = new Tablero();
tablero1.setPreferredSize(new Dimension(400,400));
tablero1.setBounds(0, 0, 400, 400);
tablero1.setBorder(new LineBorder(Color.gray, 2));
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.insets = new Insets(0, 0, 20, 0);
pantalla.getContentPane().add(tab1Label, constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.insets = new Insets(0, 0, 20, 0);
pantalla.getContentPane().add(tab2Label, constraints);
constraints.insets = new Insets(0, 0, 0, 0);
constraints.fill = GridBagConstraints.VERTICAL;
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
pantalla.getContentPane().add(tablero1, constraints);
constraints.fill = GridBagConstraints.VERTICAL;
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
pantalla.getContentPane().add(tablero2, constraints);
pantalla.pack();
pantalla.setSize(800, 400);
pantalla.setVisible(true);
pantalla.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
结果如下:
我知道还有其他方法更容易实现,但实际上必须使用 GridBagLayout。
尝试将 constraints.weightx = 1;
和 constraints.weighty = 1;
添加到您的 JTables 约束中。
同时删除那些行:
tablero1.setPreferredSize(new Dimension(400,400));
tablero1.setBounds(0, 0, 400, 400);
据我所知,在 GridLayout 和 GrigBagLayout 中调整组件大小真的很难。就我而言,我有一个包含 2 列和 2 行的 GridBagLayout。第一行有 2 个标签,第二行有 2 个扩展 JTable 的组件(类型 Tablero
)。
我的问题是,我无法让这 2 个 JTable 填充 JFrame 直到其底部。我试过 setSize(), setPreferredSize(), setBounds()
... 但它们根本不起作用。我也尝试过 constraints.fill = GridBagConstraints.VERTICAL/SOUTH/CENTER
... 但我什么也没得到。
我也尝试过在 JFrame 中设置 JPanel 的大小,但它不起作用...
这是我的代码:
public static void main(String[] args)
{
JFrame pantalla = new JFrame();
pantalla.getContentPane().setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
JLabel tab1Label = new JLabel("Tablero 1");
JLabel tab2Label = new JLabel("Tablero 2");
Tablero tablero1 = new Tablero();
Tablero tablero2 = new Tablero();
tablero1.setPreferredSize(new Dimension(400,400));
tablero1.setBounds(0, 0, 400, 400);
tablero1.setBorder(new LineBorder(Color.gray, 2));
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.insets = new Insets(0, 0, 20, 0);
pantalla.getContentPane().add(tab1Label, constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.insets = new Insets(0, 0, 20, 0);
pantalla.getContentPane().add(tab2Label, constraints);
constraints.insets = new Insets(0, 0, 0, 0);
constraints.fill = GridBagConstraints.VERTICAL;
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
pantalla.getContentPane().add(tablero1, constraints);
constraints.fill = GridBagConstraints.VERTICAL;
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
pantalla.getContentPane().add(tablero2, constraints);
pantalla.pack();
pantalla.setSize(800, 400);
pantalla.setVisible(true);
pantalla.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
结果如下:
我知道还有其他方法更容易实现,但实际上必须使用 GridBagLayout。
尝试将 constraints.weightx = 1;
和 constraints.weighty = 1;
添加到您的 JTables 约束中。
同时删除那些行:
tablero1.setPreferredSize(new Dimension(400,400));
tablero1.setBounds(0, 0, 400, 400);