我正在使用SWT设计Java应用程序。我有一些表将显示数据库中的数据,只有一些关系行与列。在某些地方,我想显示名字和姓氏,然后在其他地方,我想显示姓名,年龄和工资。我甚至可能想要显示卡通人物名字,他们所处的卡通片,他们的“好”角色或“坏”角色,角色的知名度等等。
这些只是举例说明我的观点。我想显示关系数据,就像存在于任何数据库中一样。 SWT有一个表格小部件非常适合显示这种数据(正如我希望大多数GUI库那样),但我当前设计的问题是我特意将我需要的列附加到表中,因为我需要它们。所以在我曾经附加过A,B,C列的地方,然后在这里我附加了X,Y,Z列。如果在收到数据之前我不确切知道我的列会是什么样子怎么办?
我是否可以考虑将列信息移动到数据本身中?我猜这是一个非常普遍的需求。
我想过设计一个Row对象的容器(带有一个接口),其中一个方法返回一个字符串列表,这些字符串可以是列的标题。 Row对象可以实现一个返回给定列的值的方法,但每列可能有不同的类型,那么我究竟会返回什么?此外,容器定义列名称似乎很奇怪,然后容器中的Row对象必须定义所需行为的另一半;感觉所有必需的方法都分布在多个接口上。
因此,我非常感谢任何设计模式或现有的小部件。感谢。
答案 0 :(得分:2)
当你问:“我是否有任何模式可以考虑将列信息移入数据本身时,我不确定你是什么意思?我猜这是一个非常普遍的需求。”
听起来你想构建一个表来显示你从数据库中检索的一些数据,而没有“预定义”诸如列数/行数,每列中的数据类型等等。你看过吗?有关构建TableModel的示例和教程?
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data
从数据库中获取数据后,您只需创建DefaultTableModel的实例即可。如果你看一下DefaultTableModel的构造函数,你会注意到它可以接受一个Object类型的二维数组(或者一个向量的向量,或者......你明白了),这意味着你不需要关心数据的“类型”。 JTable将根据模型中的内容找出如何最好地显示数据。如果我完全误解了你的问题,请提前道歉。