2009-01-29 81 views
3

我必须用很多控件构建一个相当大的窗体。控件分为基本控件/设置和扩展控件/设置。用户可以决定他是只想看到基本的还是基本的和扩展的控件。布局管理器可以产生多个JPanel吗?

我已经将所有扩展控件放到它们自己的JPanel中,以便通过显示或隐藏此面板来轻松切换两个视图。

目前我使用的GroupLayout,什么情况是,在不同的面板上的控制没有对齐:

Label aaa:  Text field 
Label a:  Text field 
Label aaaaaa: Text field 
---------------------------- 
Label b: Text field 
Label bbb: Text field 
Label bb: Text field 

不幸的是,我发现现在的方式来“同步”两个面板的布局(除了使用AbsoluteLayout和固定的控制坐标)

  • 有没有办法实现这个?
  • 我的整个设计是否有缺陷?

编辑:如果有可能我想保留GroupLayout管理器。

回答

2

据我所知,没有Swing LayoutManager(来自JRE或开源)可以跨越多个面板。

我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但这不是一件容易实现的事情(我已经在2周前开始了,而且我仍然看不到如果和当我会得到一些有趣的东西,但我仍然有很高的期望;-))

你可以检查的一个选项是将所有组件添加到同一个面板(然后只有一个GroupLayout),并隐藏/根据用户的选择显示它们。希望GroupLayout能够根据情况调整大小(在调用pack()之后)。

如果GroupLayout表现良好,那么在用户每次更改他的选择以显示/隐藏扩展字段后,都只需调用pack()即可。

否则,每次用户更改其选择时,您都必须手动设置面板的大小。

0

你可以使用网格布局,而不是为GroupLayout,这将给你列

1

也许最简单的(好)的方式来做到这一点是所有的组件添加到主面板。将子面板设置为非透明,并将其也添加到主面板。主面板需要优化绘图才能关闭。另一种技术是添加间隔组件。在底部面板中添加与标签相同列中的组件,这些标签可以从顶部标签中动态获取各种尺寸方法的宽度分量。与顶部面板相反。

1

我认为没有办法用标准布局管理器来做到这一点。您可能必须编写自己的布局管理器,但如果您继承GroupLayout,则不应太难。

0

如果你想保持他们在单独的面板与独立的布局:

遍历所有你添加的标签,并找到每一个的最大首选宽度。 第二次迭代,并将首选尺寸设置为每个标签的首选高度,但最大宽度。