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

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

JPanel无法由用户resize。

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

yourFrame.setResizable(false); 

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

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

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

首先,正如Shehzad所说,“可resize”并不是JPanel对象的已知属性。 但是,它是包含面板(和其他组件)的窗口或框架的属性。 现在的问题是如何在调整容器大小时防止面板resize。 正如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对象中定义的大小约束,同时由父帧resize。

更新:

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