Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组java组件_Java_Swing_Gridbaglayout - Fatal编程技术网

组java组件

组java组件,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,我正在使用GridBagLayout用Java创建GUI。我是否有办法创建一个组件组,以便将引用传递给该组并访问所有组件组 我曾考虑过创建一个面板,并以这种方式对组件进行分组,但我想知道是否有另一种方式可以利用GridBagLayout的复杂性 非常感谢 通常的方法是按照您的建议使用JPanel。请记住,JPanel本身可能有自己的独立布局管理器。因此,您可以在JPanel上使用GridBagLayout来定位面板上的元素。您应该将面板视为只写。你把你的组件放在那里,所有的组件都设置好了,并且有

我正在使用
GridBagLayout
用Java创建GUI。我是否有办法创建一个组件组,以便将引用传递给该组并访问所有组件组

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


非常感谢

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

您应该将面板视为只写。你把你的组件放在那里,所有的组件都设置好了,并且有正确的布局约束。你(几乎)从不去搜索组件


相反,在设置时将组件添加到
集合
(或类似集合)。然后,您可以在集合上执行非常干净的posh
for
循环,以执行适当的任务。一种更高级的技术是让单独的观察者(监听器)刷新模型中的组件。

好吧,如果您不能使用JLabel、JTextField和JButton创建一个bean来包含您的组,您可以在添加元素时始终在主ui面板中使用Map来注册元素。 一些结构像

Map<K, List<Component>>
Map

可能有效,其中K是组的标识符。通过这种方式,您可以将组件与它们在ui中的放置方式分离。

您所说的“可以访问所有组件”是什么意思?我有一堆
JLabel
s、
JTextField
s和
JButton
s。标签描述文本字段中的内容,按钮将更改文本字段中的内容。我的问题是:有没有办法从按钮的动作监听器中知道哪个文本字段与特定的按钮相关联?可能是映射。这个解决方案唯一的问题是,你可能很难将外部面板和内部面板的组件对齐在一起…@Guillaume创建一个有效的布局。但是,组件在面板中的组合方式以及面板如何放置在一起会影响您提到的对齐方式的外观。你一定有一些相当静态的UI。我经常添加和删除组件,例如,我可能使用装饰模式向小部件添加/删除内容,以指示错误或指示内容。此外,许多应用程序根据数据动态生成视图,或者可以使用bean属性或反射从数据填充手动创建的UI。“添加”和“删除”是写/不读操作。(我实际上倾向于隐藏/显示add/remove,尽管add/remove对非表表表很有用。)对不起,我误解了你的评论,当你说只写时,我以为你的意思是要把面板上的东西砸了,就这样,我道歉。我喜欢gridbags,发现替换已经存在的东西,替换它会得到所需的结果。