我使用了以下内容:的Java容器约束问题
java.awt.Container.add(Component comp, Object constraints)
如何specificy的约束对象?我需要能够在容器内放置一个组件。
哦,我的类扩展JInternalFrame
如果这能帮助...
我需要指定坐标放置容器
我使用了以下内容:的Java容器约束问题
java.awt.Container.add(Component comp, Object constraints)
如何specificy的约束对象?我需要能够在容器内放置一个组件。
哦,我的类扩展JInternalFrame
如果这能帮助...
我需要指定坐标放置容器
constraints
对象取决于您使用的布局管理器。
例如,具有BorderLayout
你刚才的一些常量:container.add(element, BorderLayout.CENTER)
而如果容器的布局管理器是一个GridBagLayout
你将不得不使用指定的参数GridBagConstraints
对象。
某些版面管理器(如FlowLayout
或GridLayout
)不需要任何形式的约束,因为它们实际上决定如何自行放置东西。
作为一个侧面说明,如果你需要绝对定位,你不会有任何布局管理器:
container.setLayout(null);
container.add(element1);
Insets insets = pane.getInsets();
element1.setBounds(..); //here you set absolute position
这取决于你所使用的布局管理器中的组件。例如,如果您使用的是BorderLayout
,则可以使用像BorderLayout.CENTER
和BorderLayout.NORTH
这样的值。如果您未使用布局管理器,则需要手动设置组件的位置。
正确的约束对象取决于当前的LayoutManager
。
例如,如果您使用的是BorderLayout
,约束对象可能是例如BorderLayout.SOUTH
。
看看tutorials for LayoutManagers!这些示例将向您显示哪些布局使用哪些约束以及如何使用。
+1,供参考本教程。这显然是一个初学者,教程中充满了例子,并且可以解释比其他答案中简单的一行句子更详细的约束。不仅如此,希望海报会在发布下一个问题之前查看“目录”以了解其他基本Swing功能。 – camickr 2010-04-26 17:33:43
从java.awt.Container
class'es的javadoc:
的约束是由特定的布局定义经理正在使用。例如,BorderLayout类定义了五个约束:BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.EAST,BorderLayout.WEST和BorderLayout.CENTER。
GridBagLayout类需要一个GridBagConstraints对象。未能传递正确类型的约束对象会导致IllegalArgumentException。
该注释可在保护的addImpl
方法中找到。
谢谢。这几乎奏效。如果我正在使用setBounds来调整按钮的大小,那么无论如何,我可以获得按钮的“默认”高度和宽度(例如自动调整为其显示文本的大小),以便当我调用setBounds时,我没有指定高度和宽度(只是一个x,y位置)? – llm 2010-04-26 17:49:39
您可以预先计算一次,然后使用您添加的每个按钮,根据您应该使用__component.getFontMetrics()__的字体来获取大小,然后您将拥有所需的方法(如__stringWitdh(“foobar”)__)获取尺寸.. – Jack 2010-04-26 17:58:24
我真的结束了使用“componentName”.getMinimumSize()。宽度/高度的情况下,任何人跑到这。 – llm 2010-04-26 19:16:10