6

我在一个布局中有几个 JPanel,每当我用鼠标手动更改 JFrame 的大小时,它都会拉伸 JPanel 并使其看起来很乱。有没有办法禁用它?

4

3 回答 3

10

用户无法调整 JPanel 的大小。

如果您指的是 JFrame,则可以使用

yourFrame.setResizable(false);
于 2012-04-14T20:59:23.130 回答
4

这都是关于您正在使用的 LayoutManager 的。一些 LayoutManagers 像 BorderLayout 总是给添加在中心位置的孩子额外的空间。然而,北、南、东和西只为它们分配了首选大小。我最喜欢的 LayoutManager 是 TableLayout,它非常易于使用,而且非常强大。您可以选择如何为每个孩子分配额外空间。所以这真的取决于你使用的是什么。

您还可以在 JFrame 上设置MaximumSize,它不允许您调整 JFrame 的大小。

于 2012-04-14T20:53:01.037 回答
3

我想扩展@Shehzad 和@chubbsondubs 给出的答案。

首先,正如 Shehzad 所说,“可调整大小”不是JPanel对象的已知属性。然而,它是包含面板(和其他组件)的窗口或框架的属性。现在的问题是如何防止面板在调整其容器大小时调整其大小。正如chubbsondubs 所说,这完全取决于您正在使用的布局管理器。考虑以下代码片段:

  add(contextPanel, BorderLayout.CENTER);
  add(btnPanel, BorderLayout.SOUTH);
  add(sidebar, BorderLayout.WEST);

这些行是从框架的构造函数中提取的。该sidebar对象是一个面板,GridBagLayout用于在其中放置文本字段、标签和其他组件。即使我已将面板的 、 和 属性设置preferredSizeminimumSize相同maximumSize的尺寸,但当我调整对话框大小时,容器不会“尊重”sidebar对象中设置的最小、最大和首选尺寸属性(Research Layout Managers to知道为什么会这样)。因为我的对话框(框架)不遵守这些大小限制,所以我必须将其sidebar与父框架隔离。为此,只需将其添加sidebar到另一个面板,然后将此新面板添加到对话框中。换句话说,“侧边栏”是通过添加其直接父级间接添加到对话框中的。

  JPanel dummyPane = new JPanel();
  dummyPane.add(sidePanel);

  add(contextPanel, BorderLayout.CENTER);
  add(btnPanel, BorderLayout.SOUTH);
  add(dummyPane, BorderLayout.WEST);

现在,在这种情况下,dummyPane“尊重”sidebar对象中定义的大小约束,同时由父框架调整大小。

更新:

最后一件事...如果您使用的是Absolute Positioning,则必须设置size属性而不是preferredSizeminimumSizemaximumSize。使用绝对定位时会忽略这些。绝对定位是当布局管理器设置为null并且组件的x、y坐标被显式设置时。size可以使用setSize(int width, int height)或方法设置组件的setBounds(int x, int y, int width, int height)

于 2017-02-18T20:16:35.193 回答