2013-01-04 39 views
3

我正在寻找处理以下一个简单的方法:依赖孩子的Java Swing布局?

A类的所有物品应水平放置。 所有B型物品都应垂直布置。因此,例如:

 
AAA 
B 
AA 
B 
B 
AAAAAA 

类型B的项目将是具有相同行为的容器,因此整个事物将嵌套任意数量的层次。

有没有一个简单的方法来实现这一点,而不是在A的集合周围放置一个容器?

+0

A和B的数量是可以确定的吗? – Radi

+0

为什么“没有在A的藏品周围放置容器”?通常,当遇到任何不平凡的问题时,我真的很想将其减少到一个或更多更简单的问题。在这种情况下,在A的周围放置一个容器可以将其简化为简单的垂直和水平布局的组合,这对我来说似乎是件好事。没有做这种减少的动机是什么? –

+0

使用复合组件/布局的组合。基本上,您可以使用一个简单的'GridLayout'(已经提出)用于基本布局。使用类似'FlowLayout'的方法将“A”的每一行添加到“JPanel”,并且如果您需要额外的布局帮助,则每个“B”可以直接添加到父容器或子容器中... – MadProgrammer

回答

1

如果你搜索了一下,你会发现一个VerticalFlowLayout。正如我看到你需要的是一个自定义布局管理器,因为你必须处理FlowLayout和VarticalFlowLayout混合。

你必须重载/实现的基本方法:described here

我将数据存储在二维数组/列表的行和列。 覆盖addLayoutComponent和removeLayoutComponent是必须的。

我希望它有帮助!

+0

这就是“没有在我的问题中,在A的集合中放置一个容器。我问是否有办法避免围绕A元素的水平容器。 – mentics

+0

@taotree是的,“当我看到你需要的是一个自定义的布局管理器,因为”因此,再次:我建议做一个自定义布局管理器。从VerticalFlowLayout和FlowLayout(水平)中获取源代码,并在需要的地方混合自定义逻辑。 – 2013-01-04 21:20:57

2

您可以使用GridLayout来排列A的行和B的列。

+1

+1,处理左右对齐将会有点困难,并且当并非所有A在每一行中的长度都相同时,它会有点丑陋的界面或代码:)但它可能是一个解决方案。 – 2013-01-04 21:22:56

1

添加A的到一个JPanel(GridLayout的(1,0))

添加B的到一个JPanel(GridLayout的(0,1))

添加每个A和B面板的holdingPanel(BoxLayout的( Y_AXIS))