如何使用GridBagLayout摆脱Java JTextField和JLabel之间的不需要的空间

时间:2016-12-18 19:03:38

标签: java jlabel jtextfield gridbaglayout

使用Java GridBagLayout为什么在列之前的第一个JTextField(Labeled 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);    

Image of the right panel with space problem

2 个答案:

答案 0 :(得分:1)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Kursinis darbas </title> <link rel="stylesheet" href="stylesheet.css" type="text/css"> <meta name="viewport" content="width=device-width" content="initial-scale=1"> </head> <body> <div class="zydra"></div> <div class="zalia"></div> <div class="geltona"></div> <div class="melyna"></div> <div class="oranzine"></div> <div class="ruda"></div> <div id="balta" class="balta" onmouseover="pirmaT()" onmouseout="pirmaN()" ><span id="pirma">Tekstas</span></div> <div class="raudona"></div> <div class="juoda"></div> <script> function pirmaT(){ document.getElementById("pirma").style.color = "white"; document.getElementById("balta").style.backgroundColor = "black"; } function pirmaN(){ document.getElementById("trecia").style.color = "black"; document.getElementById("balta").style.backgroundColor = "white"; } </script> </body> </html> 适用于由行/列组成的单元格。

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

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

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

GridBagLayout

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

阅读How to Use GridBagLayout上Swing教程中的部分,了解有关约束和工作示例的更多信息。

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

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

答案 1 :(得分:0)

gbcRightPanel.weighty = 1;

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

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