使用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);
答案 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轴上的任何空格都会转到第一列。
尝试添加第四列,并为此列赋予更大的权重。