Java GridBag面板未占用所有空间

Java GridBag面板未占用所有空间,java,swing,user-interface,Java,Swing,User Interface,我正在尝试创建一个列中带有标签的行列表。我试图使用gridbaglayout,但遇到了一个问题。当我展开窗口时,它不会展开。情况就是这样: 我真正想要的是布局中的it单元占据1/5的空间,标签移动到单元的最左侧 public static JPanel createLayout(int rows) { JPanel product = new JPanel(new GridBagLayout()); String[] lables = {"School", "Advanc

我正在尝试创建一个列中带有标签的行列表。我试图使用gridbaglayout,但遇到了一个问题。当我展开窗口时,它不会展开。情况就是这样:

我真正想要的是布局中的it单元占据1/5的空间,标签移动到单元的最左侧

   public static JPanel createLayout(int rows) {
    JPanel product = new JPanel(new GridBagLayout());
    String[] lables = {"School", "Advanced #", "Novice #"};
    double weight = 1/(lables.length);
    for (int i = 0; i < rows; i++) {
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(3, 3, 3, 3);
        c.anchor = GridBagConstraints.WEST;
        c.gridx = i;
        c.weightx = weight;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.NORTHWEST;
        for (int j = 0; j < lables.length; j++) {

            JLabel l = new JLabel(lables[j]);
            product.add(l, c);
        }
    }
    return product;
}

public static void main(String[] args) throws IOException {
    JFrame frame = new JFrame("Debate Calculator");
    JPanel debates = new JPanel();
    frame.add(createLayout(5), BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
     }
publicstaticjpanelcreatelayout(int行){
JPanel产品=新的JPanel(新的GridBagLayout());
String[]标签={“学校”、“高级”、“新手”};
双倍重量=1/(标签长度);
对于(int i=0;i
我认为问题在于你的体重计算

double weight = 1/(lables.length);
因为
1
lables.length
都是int值,所以Java会自动将结果转换为
int
(即
0

相反,试着像

double weight = 1d/(double)lables.length;

非常感谢。只是一个附带问题:当我将ancor设置为GridBagConstraints.CENTER并将其应用于标签时,它不起作用。还有什么方法可以使标签在单元格中居中?这将取决于
GridBagConstraint
fill
属性,如果标签是
水平的
两者都是
,则标签本身需要使用
JLabel\setHorizontalAlignment(JLabel.center)
设置其水平位置,您还可以查看“JLabel#setVerticalAlignment”