【发布时间】:2011-11-14 17:37:54
【问题描述】:
我有一个 Java 中 SI(单指令)类型的对象列表。 这是 SI 类及其构造函数。
public class SI {
private String recipe;
private Integer makingOrder;
private String instruction;
private double estimatedTimeInMinutesSeconds;
private Double timerInMinutesSeconds;
private String timerEndingText;
private boolean containsOtherInstructions = false;
private List<SI> embeddedInstructionsList;
public SI (String s1, Integer i1, String s2, double d1, Double d2, String s3){
recipe = s1;
makingOrder = i1;
instruction = s2;
estimatedTimeInMinutesSeconds = d1;
timerInMinutesSeconds = d2;
timerEndingText = s3;
}
setters and getters methods ommited....
我需要在我的 GUI 中有一个表格来显示这个列表的数据。 当我开始程序时,我创建了一个
public List<SI> finalList = new ArrayList();
这是空的,所以我需要显示一个空表。 该表应包含
列(String Recipe, Integer Order, String Instruction, double Est.time, Double Timer, String TimerText, boolean containsOtherInstructions)
之后,finalList 中填充了数据,我需要将这些数据显示在表格中。 为了给你举个例子,我创建了一个按钮来创建一些 SI 并将它们添加到 finalList。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
SI si1 = new SI("Greek Salad", 1, "cut veggies", 4, null, null);
SI si2 = new SI("Greek Salad", 2, "put spices", 1, null, null);
SI si3 = new SI("Greek Salad", 3, "feta and finish", 1, null, null);
SI si4 = new SI("Break", null, "Your free 10 minutes", 10, null, null);
SI si5 = new SI("Meat", 1, "preheat oven", 0.5, 10.0, "oven is ready");
SI si6 = new SI("Meat", 2, "spices on meat", 2, null, null);
SI si7 = new SI("Meat", 3, "cook meat", 1, 10.0, "meat is ready");
SI si8 = new SI("Meat", 4, "serve", 1, null, null);
SI si9 = new SI("Break", null, "Your free 10 minutes", 10, null, null);
SI si10 = new SI("Jelly", 1, "Boil water", 0.5, 4.0, "water is ready");
SI si11 = new SI("Jelly", 2, "add mix and stir", 4, null, null);
SI si12 = new SI("Jelly", 3, "share in bowls, wait 3 hours", 2, null, null);
finalList.add(si1);
finalList.add(si2);
finalList.add(si3);
finalList.add(si4);
finalList.add(si5);
finalList.add(si6);
finalList.add(si7);
finalList.add(si8);
finalList.add(si9);
finalList.add(si10);
finalList.add(si11);
finalList.add(si12);
}
现在我需要在按下按钮时更新表格并显示数据。 我已经尝试了很多来找出如何做到这一点,但这太难了。我不确定我应该扩展 AbstractTableModel 还是只使用 defaultTableModel。
为了帮助您给我建议,此表的数据是最终数据,用户不能修改任何单元格。但是,应该允许用户做的是向上或向下移动行以更改 finalList 中的顺序。
PS:如果您对 GUI builder 有任何快速建议,我正在使用 netbeans。
【问题讨论】:
-
1) What have you tried? 2) 你的问题是什么?
-
我实际上被困在如何做到这一点......我已经检查了很多论坛,这个:dreamincode.net/forums/topic/… 可能是最接近的,但我不知道如何将它应用到我的对象列表中...如何设置列名和类型?如何将数据传递给表...
-
@Ioannis,是的,BeanTableModel 很复杂,因为它使用反射。但是,您不需要自定义任何代码。它的一行代码创建模型,另一行代码将模型添加到表中。您是否下载了
JButtonTableModel.java代码?它展示了如何直接使用 BeanTableModel,或者展示了如何通过几行代码扩展 RowTableModel 以使用您的 SI 对象。 -
我注意到您在下面的评论中希望支持上下移动行。 RowTableModel 已经支持移动行的功能。如果您发现 BeanTableModel 太混乱,我建议您专注于 JButtonTableModel 示例。这些更改与您在下面使用的几乎相同,只是您扩展到 RowTableModel 而不是 AbstractTableModel 这使您能够使用所有 RowTableModel 方法而不是自己实现它们。
-
我没有意识到 JbuttonTableModel 是一个例子......我终于理解了它,你是对的......使用 beanModel 很容易。我现在可能会选择行模型.. **就像这样简单**
private BeanTableModel model = new BeanTableModel(SI.class);jtable.setmodel(model);Iterator iter = finalList.iterator(); while(iter.hasNext()){ SI si = (SI) iter.next(); model.addRow(si); }以及我设法通过一些修改来移动行......谢谢。