Java 如何使GridBagLayout具有特定的大小?

Java 如何使GridBagLayout具有特定的大小?,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,目前,我使用GridBayLayout获得了一个9x9的文本字段网格。因为网格使每个文本字段的长度比其高度要长(即使我为文本字段设置了特定的高度),所以网格是矩形,而不是正方形 如何使整个网格具有特定的大小,或使网格中的每个文本字段具有特定的大小 编辑:我需要文本字段的9 x 9网格是正方形,而不是矩形 问题在于大小提示,方法[get/set][Minimum/Maximum/Preferred]Size告诉布局管理器组件想要的大小,布局管理器有时会忽略,有时不会GridBagLayout尊重这

目前,我使用
GridBayLayout
获得了一个9x9的文本字段网格。因为网格使每个文本字段的长度比其高度要长(即使我为文本字段设置了特定的高度),所以网格是矩形,而不是正方形

如何使整个网格具有特定的大小,或使网格中的每个文本字段具有特定的大小

编辑:我需要文本字段的9 x 9网格是正方形,而不是矩形


问题在于大小提示,方法
[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);
    }
}
此类的所有对象应具有相同的尺寸,并且应为正方形


将网格中的
jtextfield
替换为
SquareJTextField

您希望这里有完整的教程吗?请按照这里的规则展示您迄今为止所做的尝试:@statefi我更好奇的是,是否有某种约束我可以使用最近出现的与9x9文本字段GUI相关的问题奇怪地涌入,似乎作业已经到期。如果GridBagLayout sespects大小提示,设置它而不是子类会更容易吗?只是想知道…我认为在这种情况下,JTextFields告诉布局它们的大小,这意味着尽管GridBag可以假定一定的大小,但JTextFields仍然会保持它们想要的大小,并且可能会导致重叠或偏离末端或其他情况。@Betlista通常不建议使用设置器设置大小提示。这就是我为什么要回避它的原因。