我在布局中有几个JPanel,每当我用鼠标手动更改JFrame的大小时,它会拉伸JPanel并使其看起来很乱。有没有办法禁用它?
答案 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
放置文本字段,标签和其他组件的面板。即使我已将面板的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
对象中定义的大小约束,同时由父框架调整大小。
最后一件事......如果您使用 绝对定位 ,则必须设置size
属性,而不是preferredSize
,{{ 1}}或minimumSize
。使用绝对定位时会忽略这些。绝对定位是指布局管理器设置为maximumSize
并且显式设置组件的 x,y 坐标时。可以使用null
或size
方法设置组件的setSize(int width, int height)
。