如何禁用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
在其中放置文本字段,标签和其他组件。 即使我已将面板的preferredSize
, minimumSize
和maximumSize
属性设置为相同的尺寸,但在调整对话框大小时,容器不会“尊重” 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
属性,而不是preferredSize
, minimumSize
或maximumSize
。 使用绝对定位时会忽略这些。 绝对定位是指布局管理器设置为null
并且显式设置组件的x,y坐标时。 可以使用setSize(int width, int height)
或setBounds(int x, int y, int width, int height)
方法设置组件的size
。