2010-04-26 43 views
4

我使用了以下内容:的Java容器约束问题

java.awt.Container.add(Component comp, Object constraints) 

如何specificy的约束对象?我需要能够在容器内放置一个组件。

哦,我的类扩展JInternalFrame如果这能帮助...

我需要指定坐标放置容器

回答

1

constraints对象取决于您使用的布局管理器。

例如,具有BorderLayout你刚才的一些常量:container.add(element, BorderLayout.CENTER)

而如果容器的布局管理器是一个GridBagLayout你将不得不使用指定的参数GridBagConstraints对象。

某些版面管理器(如FlowLayoutGridLayout)不需要任何形式的约束,因为它们实际上决定如何自行放置东西。

作为一个侧面说明,如果你需要绝对定位,你不会有任何布局管理器:

container.setLayout(null); 
container.add(element1); 

Insets insets = pane.getInsets(); 
element1.setBounds(..); //here you set absolute position 
+0

谢谢。这几乎奏效。如果我正在使用setBounds来调整按钮的大小,那么无论如何,我可以获得按钮的“默认”高度和宽度(例如自动调整为其显示文本的大小),以便当我调用setBounds时,我没有指定高度和宽度(只是一个x,y位置)? – llm 2010-04-26 17:49:39

+0

您可以预先计算一次,然后使用您添加的每个按钮,根据您应该使用__component.getFontMetrics()__的字体来获取大小,然后您将拥有所需的方法(如__stringWitdh(“foobar”)__)获取尺寸.. – Jack 2010-04-26 17:58:24

+0

我真的结束了使用“componentName”.getMinimumSize()。宽度/高度的情况下,任何人跑到这。 – llm 2010-04-26 19:16:10

0

这取决于你所使用的布局管理器中的组件。例如,如果您使用的是BorderLayout,则可以使用像BorderLayout.CENTERBorderLayout.NORTH这样的值。如果您未使用布局管理器,则需要手动设置组件的位置。

+0

如何手动执行此操作?我需要基本上给它“坐标”来指定它的位置。我只是不知道如何构建“约束”对象。 – llm 2010-04-26 17:28:48

+1

您可以为约束对象传递'null',并在组件上使用'setBounds'或'setLocation'来定位它。 – 2010-04-26 17:31:12

+1

如果手动设置边界和位置,则不需要将任何约束传递给add-method。然而布局管理器应该被设置为null。 – aioobe 2010-04-26 17:32:49

0

正确的约束对象取决于当前的LayoutManager

例如,如果您使用的是BorderLayout,约束对象可能是例如BorderLayout.SOUTH

3

看看tutorials for LayoutManagers!这些示例将向您显示哪些布局使用哪些约束以及如何使用。

+1

+1,供参考本教程。这显然是一个初学者,教程中充满了例子,并且可以解释比其他答案中简单的一行句子更详细的约束。不仅如此,希望海报会在发布下一个问题之前查看“目录”以了解其他基本Swing功能。 – camickr 2010-04-26 17:33:43

1

java.awt.Container class'es的javadoc:

的约束是由特定的布局定义经理正在使用。例如,BorderLayout类定义了五个约束:BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.EAST,BorderLayout.WEST和BorderLayout.CENTER。

GridBagLayout类需要一个GridBagConstraints对象。未能传递正确类型的约束对象会导致IllegalArgumentException。

该注释可在保护的addImpl方法中找到。