如何使 GridBagLayout 特定大小?
How to make GridBagLayout specific size?
目前我有一个 9x9 的文本字段网格,使用 GridBayLayout
。因为网格使每个文本字段的长度比它的高度略长(即使我为文本字段设置了特定的高度),所以网格是一个矩形,而不是正方形。
如何使整个网格具有特定大小,或者网格内的每个文本字段具有特定大小?
编辑:我需要 9 x 9 的文本字段网格是方形的,而不是矩形的。
问题在于调整大小提示,方法 [get/set][Minimum/Maximum/Preferred]Size
告诉布局管理器组件想要的大小,布局管理器有时会忽略它,有时他们不会。 GridBagLayout
尊重这一点,你的 JTextFields
告诉他他们想要长方形。如何 JTextFields
弄清楚他们想要的尺寸是各种困难,所以让我们忽略它。
如果您想确保所有 JTextFields
大小相同,您应该覆盖这些方法。 Subclass JTextField
并制作如下内容:
final class SquareJTextField extends JTextField {
private static Dimension maxDimension = new Dimension(0, 0);
@Override
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
// take the larger value
int max = d.width > d.height ? d.width : d.height;
// compare it against our static dimension
// height je rovnaky ako width
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
// return copy so no one can change the private one
return new Dimension(maxDimension);
}
@Override
public Dimension getMinimumSize() {
Dimension d = super.getPreferredSize();
int max = d.width > d.height ? d.width : d.height;
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
return new Dimension(maxDimension);
}
@Override
public Dimension getMaximumSize() {
Dimension d = super.getPreferredSize();
int max = d.width > d.height ? d.width : d.height;
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
return new Dimension(maxDimension);
}
}
此 class 的所有对象应具有相同的尺寸且应为正方形。
将网格中的 JtextFields
替换为 SquareJTextField
目前我有一个 9x9 的文本字段网格,使用 GridBayLayout
。因为网格使每个文本字段的长度比它的高度略长(即使我为文本字段设置了特定的高度),所以网格是一个矩形,而不是正方形。
如何使整个网格具有特定大小,或者网格内的每个文本字段具有特定大小?
编辑:我需要 9 x 9 的文本字段网格是方形的,而不是矩形的。
问题在于调整大小提示,方法 [get/set][Minimum/Maximum/Preferred]Size
告诉布局管理器组件想要的大小,布局管理器有时会忽略它,有时他们不会。 GridBagLayout
尊重这一点,你的 JTextFields
告诉他他们想要长方形。如何 JTextFields
弄清楚他们想要的尺寸是各种困难,所以让我们忽略它。
如果您想确保所有 JTextFields
大小相同,您应该覆盖这些方法。 Subclass JTextField
并制作如下内容:
final class SquareJTextField extends JTextField {
private static Dimension maxDimension = new Dimension(0, 0);
@Override
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
// take the larger value
int max = d.width > d.height ? d.width : d.height;
// compare it against our static dimension
// height je rovnaky ako width
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
// return copy so no one can change the private one
return new Dimension(maxDimension);
}
@Override
public Dimension getMinimumSize() {
Dimension d = super.getPreferredSize();
int max = d.width > d.height ? d.width : d.height;
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
return new Dimension(maxDimension);
}
@Override
public Dimension getMaximumSize() {
Dimension d = super.getPreferredSize();
int max = d.width > d.height ? d.width : d.height;
if (max > maxDimension.width)
maxDimension = new Dimension(max, max);
return new Dimension(maxDimension);
}
}
此 class 的所有对象应具有相同的尺寸且应为正方形。
将网格中的 JtextFields
替换为 SquareJTextField