如何禁用JPanel以使其无法在Java中更改大小

时间:2012-04-14 20:47:27

标签: java resize jframe jpanel

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

3 个答案:

答案 0 :(得分:9)

用户无法调整JPanel的大小。

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

yourFrame.setResizable(false);

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

首先,正如Shehzad所说,“可调整大小”并不是JPanel个对象的已知属性。但是,它是包含面板(和其他组件)的窗口或框架的属性。现在的问题是如何在调整容器大小时防止面板调整大小。正如chubbsondubs所述,它与你正在使用的布局管理器有关。请考虑以下代码段:

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

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

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

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

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

UPDATE:

最后一件事......如果您使用 绝对定位 ,则必须设置size属性,而不是preferredSize,{{ 1}}或minimumSize。使用绝对定位时会忽略这些。绝对定位是指布局管理器设置为maximumSize并且显式设置组件的 x,y 坐标时。可以使用nullsize方法设置组件的setSize(int width, int height)