繁体   English   中英

如何使用GridBagLayout摆脱Java JTextField和JLabel之间的多余空间

[英]How can I get rid of the unwanted space between a Java JTextField and a JLabel using the GridBagLayout

使用Java GridBagLayout,为什么在该列之前的第一个JTextField(标记为A)的右边有一个很大的空间,但是最后两个JTextField的B和C的行为符合预期,而它们之间没有不需要的空格,我该如何消除该空格? 我在下面附加了一张图像,以显示问题和代码。

    /* Label digital timer */
    gbcRightPanel.gridx = 0;
    gbcRightPanel.gridy = 0;
    rightPanel.add(labelDitigalTimer, gbcRightPanel);

    /* Text Field Hours */
    gbcRightPanel.gridx = 0;
    gbcRightPanel.gridy = 1;
    gbcRightPanel.weighty = 1;
    rightPanel.add(jtxtFieldHours, gbcRightPanel);

    /* Label colon */
    gbcRightPanel.gridx = 1;
    gbcRightPanel.gridy = 1;
    rightPanel.add(new JLabel(":"), gbcRightPanel);

    /* Text Field Minuites */
    gbcRightPanel.gridx = 2;
    gbcRightPanel.gridy = 1;
    rightPanel.add(jtxtFieldMinuites, gbcRightPanel);

    /*Colon*/
    gbcRightPanel.gridx = 3;
    gbcRightPanel.gridy = 1;
    rightPanel.add(new JLabel(":"), gbcRightPanel);

    /* Text Field Seconds */
    gbcRightPanel.gridx = 4;
    gbcRightPanel.gridy = 1;
    rightPanel.add(jtxtFieldSeconds, gbcRightPanel);    

右侧面板出现空间问题的图像

GridBagLayout适用于由行/列组成的单元格。

第一行只有一列。 第二行有5列。

因此,第1列的宽度是第一列所有行中最大成分的宽度,恰好是您的标签,因此您会看到额外的空间。

更改此方法的一种方法是使标签占用5列。 因此,在添加标签之前,您需要使用:

gbcRightPane.gridWidth = 5;
rightPanel.add(labelDitigalTimer, gbcRightPanel);
gbcRightPane.gridWidth = 1; // reset for the other components.

现在,标签将显示在所有5个组件的上方。 然后,可以通过指定适当的约束来确定是使标签居中还是左对齐。

阅读Swing教程中有关如何使用GridBagLayout的部分, 获取有关约束和工作示例的更多信息。

另一种方法是使用嵌套面板。 因此,您可以为文本字段和冒号标签创建一个单独的面板。 然后在GridBagPanel中,将标签和面板添加为两个单独的组件。

从教程中阅读其他布局管理器,以了解每个布局管理器如何工作,您可以有效地嵌套面板以获取所需的布局。

gbcRightPanel.weighty = 1;

使面板的乘数/宽度为1.0,因此在放置所有其他元素后在x轴上留下的任何空间转到第一列。

尝试添加第四列,并赋予该列更大的权重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM