目前我使用GridBayLayout
获得了一个9x9的文本字段网格。因为网格使每个文本字段比它更高更长(即使我为文本字段设置了特定高度),网格也是一个矩形,而不是正方形。
如何使整个网格成为特定尺寸,或者网格内的每个文本字段都是特定尺寸?
编辑:我需要9 x 9网格的文本字段是方形的,而不是矩形的。
答案 0 :(得分:1)
问题在于调整提示,方法[get/set][Minimum/Maximum/Preferred]Size
告诉布局管理器组件想要的大小,布局管理器有时会忽略它,有时它们不会。 GridBagLayout
尊重这一点,而你的JTextFields
告诉他他们想要成为长方形。如何JTextFields
弄清楚他们想要的大小是多么困难所以让我们把它留下来。
如果您想确保所有JTextFields
的大小相同,则应覆盖这些方法。子类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);
}
}
此类的所有对象应该是相同的维度,并且应该是正方形。
使用JtextFields
SquareJTextField