我正在学习如何使用GridBagLayout。我在JFrame中创建了两个按钮。我试着让它们中的一个占用一个柱子(默认),另外两个柱子,因此是第一个柱子的两倍(我知道我可以使用setPrefferredSize实现这个,但我的目的是学习如何使用gridwidth和gridheight)。
有什么问题?感谢
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
Main(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500,500);
JPanel panel1 = new JPanel(new GridBagLayout());
JButton b1,b2;
b1 = new JButton("button 1");
b2 = new JButton("button 2");
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridwidth = 1;
panel1.add(b1);
gbc.gridx = 2;
gbc.gridwidth = 2;
panel1.add(b2);
add(panel1);
setVisible(true);
}
public static void main(String[]args){
Main m = new Main();
}
}
答案 0 :(得分:2)
第二个按钮的宽度与多少列无关。
实际上两个按钮都会被要求提供他们喜欢的宽度,如果它们有足够的空间,宽度将被设置为它们。
如果空间较小,则使用最小宽度。
如果有额外的空间,它会根据重量比例在控件之间分配。
你可以尝试设置第一个iPadX = 100,iPadx = 200,第一个设置iPadX = 1,第二个设置iPadx = 2。
答案 1 :(得分:1)
问题是GridBagLayout的所有列都没有相同的宽度。宽度是根据它们包含的组件的首选大小计算的。因此,您可以使用3,4或100作为第二个按钮的网格宽度,它不会改变任何内容。
您需要使用fillx和weightx来更改按钮调整大小的方式。
答案 2 :(得分:0)
尝试以这种方式使用GridBagConstraint,希望这对您有帮助。
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
Main(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500,500);
JPanel panel1 = new JPanel(new GridBagLayout());
JButton b1,b2;
b1 = new JButton("button 1");
b2 = new JButton("button 2");
panel1.add(b1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
panel1.add(b2, new GridBagConstraints(1, 0, 1, 1, 2.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
add(panel1);
setVisible(true);
}
public static void main(String[]args){
Main m = new Main();
}
}
修改强>
或更改您的代码如下所示:
gbc.gridx = 1;
gbc.gridwidth = 1;
panel1.add(b1, gbc);
gbc.gridx = 2;
gbc.gridwidth = 2;
gbc.fill = gbc.HORIZONTAL; //set fill property to HORIZONTAL
gbc.weightx= 2.0;
panel1.add(b2, gbc); //While adding button also add it with gbc