【问题标题】:stretched button in the gridLayoutgridLayout 中的拉伸按钮
【发布时间】:2011-01-31 21:22:10
【问题描述】:

大家,我对 Java 有一些问题我创建了五行一列的面板,我还在其中一行添加了按钮,最后我将此面板添加到框架中,我收到了拉伸到完整的按钮框架,我可以减小按钮的大小吗,我用过

myButton.setSize(10,10);

但它似乎不起作用,我也在使用

frame.pack();

可能是问题,提前谢谢

【问题讨论】:

  • 你能发布整个 gui 创建代码吗?

标签: java swing jbutton layout-manager gridbaglayout


【解决方案1】:

您应该避免自己设置尺寸。您应该选择合适的 LayoutManager 来为您完成这项工作。

(除非您明确执行setLayout(null),否则您设置的尺寸将被丢弃,当前布局管理器将为组件分配新尺寸。)

您说您使用的是GridLayout。这种布局相当“不灵活”,如果你想要GridLayout 的好处但更灵活,你可以试试GridBagLayout

如果您没有找到适合您需求的布局管理器,请不要害怕自己编写。 (这是五个相对容易实现的方法。)

如果您发布当前应用程序的屏幕截图,并说明您希望它的外观,我们将能够为您提供进一步的帮助。

一些有用的链接

【讨论】:

    【解决方案2】:

    当您使用布局管理器(如GridLayout)时,对setSize() 的调用通常不起作用,因为布局管理器最终决定如何调整每个组件的大小并将其放置在容器中。

    您可以致电setPreferredSize()setMaximumSize() 和/或setMinimumSize()。根据使用的布局管理器,这些请求中的一个或多个(因为它们确实如此)将得到尊重。当您调用 frame.pack() 时,它会尝试将容器(和子容器)中的所有内容调整为首选大小。

    因此,在您的情况下,调用myButton.setPreferredSize (10, 10); 可能会起作用。但是,如果容器改变大小,它仍然会调整大小。如果您不希望这样,我可以发布其他解决方案。

    【讨论】:

      【解决方案3】:

      当 aloobe 似乎为您提供更通用的解决方案时。我想说直接的解决方案是将按钮添加到 JPanel,将 Layoutmanager 设置为 GridLayout 之类的布局,或者另一个 LayoutManager,如果您发现另一个更适合您的话。

      然后将此面板添加到您的原始面板中,代替按钮。

      【讨论】:

      • 我的术语是“嵌套布局”。我无法想象使用任何一种布局创建一个可行的 GUI(甚至是 GrievousBodilyLayout,哦,对不起 - GridBagLayout)。
      最近更新 更多