2010-02-11 35 views
4

我使用GridBagLayout以Java创建GUI。我有没有办法创建一个组件组,以便我可以将引用传递给组并且可以访问所有组件?组java组件

我曾考虑创建一个面板并按照这种方式对组件进行分组,但是我想知道是否有另一种方法可以利用GridBagLayout的复杂性。

非常感谢!

+0

你是什么意思的“有机会获得所有人?” – finnw 2010-02-11 14:44:54

+0

我有一堆'JLabel','JTextField's和'JButton's。标签描述了文本字段中的内容,并且该按钮将更改文本字段中的内容。我的问题如下:有没有办法知道哪个文本字段与按钮的动作侦听器中的特定按钮相关联? – chama 2010-02-11 14:56:23

+0

Map 也许。 – vickirk 2010-02-11 16:24:15

回答

3

那么,如果你不能用JLabel,JTextField和JButton来创建一个包含你的组的bean,你可以在你的主UI面板上使用Map来在添加它们时注册这些元素。 像

Map<K, List<Component>> 

某些结构可能工作,其中K是一组一个标识符。通过这种方式,您可以将组件与ui中的组件分开。

0

通常的方法是按照您的建议使用JPanel。请记住,JPanel本身可能有自己的独立布局管理器。因此,您可以使用JPanel上的GridBagLayout将元素放置在面板上。

+0

这个解决方案的唯一问题是,您可能很难将外部和内部面板的组件对齐在一起... – Guillaume 2010-02-11 14:47:38

+0

@Guillaume需要仔细规划才能创建有效的布局。但是组件在面板中分组的方式以及面板如何彼此相邻放置会影响您提到的对齐方式的外观。 – 2010-02-11 14:50:14

2

您应该将面板视为只写。你打开你的组件,所有的设置和正确的布局约束。你(几乎)不会去搜索组件。

取而代之,将组件添加到您设置的Set(或类似)中。然后你可以做一个非常干净的posh for循环在集合上来执行适当的任务。更高级的技巧是让单个观察者(听众)从模型中刷新组件。

+0

我绝不会认为面板是只写的。你必须有一些漂亮的静态用户界面。我经常添加和移除组件,例如我可能会使用装饰模式向窗口小部件添加/删除东西来指示错误或指示某些内容。此外,许多应用程序基于数据动态地生成其视图,或者可能使用bean属性或反射来从数据填充手动创建的UI。 – vickirk 2010-02-11 16:26:12

+0

“add”和“remove”是写/不读操作。 (我实际上倾向于隐藏/显示,而不是添加/删除,尽管添加/删除对于非表格表格非常有用。) – 2010-02-11 17:21:07

+0

对不起,我误解了你的评论,当你说只写我认为你的意思是重击的东西在面板上,多数民众赞成它,我很抱歉。我喜欢网格包,并找到它已经存在的地方,并将其替换为需要的结果。 – vickirk 2010-02-11 22:43:01