处理大量Swing组件

时间:2013-06-06 20:09:09

标签: java swing jcheckbox buttongroup

一个小小的背景故事:我正在为一位工程师朋友做一个忙,让他成为一个帮助他安排factorys生产的计划。每种类型的产品都分解为一系列步骤(它们共享很多步骤,但存在一些差异)。

编程问题:

每次注册新的生产过程时,我都会显示一些代表前面提到的步骤的复选框。他可以选择为这个特定产品添加哪些步骤。如果他选中一个复选框,则会出现两个(或更多)文本字段,他可以在其中添加其他信息(开始日期,持续时间,评论等...)。我的问题是,这是很多单独的组件,我不确定如何处理它们。因为我需要在某个时刻访问所有这些(复选框以查看是否需要该步骤以及数据的所有文本字段)我正在考虑将它们全部作为字段,但这感觉不对。 ..

另一种方法可能是创建一个容器类,将文本字段与复选​​框组合在一起。像这样:

ArrayList<MyComponentGroup> group;
for (MyComponentGroup cg : group) {
    if (cg.getCheckBox().isSelected()) {
        //access and read the data from all the textfields in this object
    }
}

什么是Java编程约定或最常用的方法来处理这种情况?

提前致谢, 的István

2 个答案:

答案 0 :(得分:3)

这是我在处理大量组件和类似要求时会做的事情:

  • 我会模拟选项之间的关系(可通过复选框选择获得)和要填充的相关数据(要求)。此模型可能已经可供您使用。
  • 我会尝试使用PropertyEditor个实例并将它们映射到模型元素。
  • 当需要保存或使用用户填写的数据时,我只需走屏幕上显示的模型,抓取相关的编辑器并处理这些编辑的价值。

我认为上面介绍的方法可以减少你的工作量,并为你的朋友带来更大的灵活性。

您只需支付在漂亮的模型中获取组件关系/依赖关系的初始成本,以及注册用于可视化编辑的重要PropertyEditors。

希望它有所帮助。

答案 1 :(得分:2)

一种方法是始终为每个JComponent提供唯一的名称。使用层次结构来适应复杂的过程,例如“Whites.Rinsecycle.enableCB”。为了完整性,将此String存储为JComponent中的clientProperty。然后,您可以将其用作大Map中的密钥来访问所有组件。

也许不是最“优雅”(我倾向于使用相关领域的JPanels层次结构),但对于稍微快速和肮脏,中等规模的项目,这是合理的。