java jtable setmodel_java – 将对象列表连接到JTable

我有一个Java类型的SI(SingleInstruction)对象列表.

这是带有构造函数的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 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 finalList = new ArrayList();

这是空的,所以我需要一个空表来显示.

该表应该有列

(String Recipe, Integer Order, String Instruction, double Est.time,

Double Timer, String TimerText, boolean containOtherInstructions)

之后,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构建器有任何快速建议,我正在使用netbeans.

解决方法:

在模型 – 视图 – 控制器架构中,模型始终负责提供数据.如果您为JTable使用模型,则模型会提供数据.

为了创建模型,创建一个扩展AbstractTableModel的单独类,并具有一个构造函数,用于创建所需的所有SI对象并将它们存储到ArrayList中.

public class FinalTableModel extends AbstractTableModel {

private List li = new ArrayList();

private String[] columnNames = { "Recipe", "Order", "Instruction",

"Est.time", "Timer", "Timer Label", "Has Subinstructions"};

public FinalTableModel(List list){

this.li = list;

}

@Override

public String getColumnName(int columnIndex){

return columnNames[columnIndex];

}

@Override

public int getRowCount() {

return li.size();

}

@Override

public int getColumnCount() {

return 7;

}

@Override

public Object getValueAt(int rowIndex, int columnIndex) {

SI si = list.get(rowIndex);

switch (columnIndex) {

case 0:

return si.getRecipe();

case 1:

return si.getMakingOrder();

case 2:

return si.getInstruction();

case 3:

return si.getEstimatedTimeInMinutesSeconds();

case 4:

return si.getTimerInMinutesSeconds();

case 5:

return si.getTimerEndingText();

case 6:

return si.isContainsOtherInstructions();

}

return null;

}

@Override

public Class> getColumnClass(int columnIndex){

switch (columnIndex){

case 0:

return String.class;

case 1:

return Integer.class;

case 2:

return String.class;

case 3:

return Double.class;

case 4:

return Double.class;

case 5:

return String.class;

case 6:

return Boolean.class;

}

return null;

}

}

然后制作你的JFrame,并像这样创建你的JTable:

jScrollPane1 = new javax.swing.JScrollPane();

jTable1 = new javax.swing.JTable();

jTable1.setModel(new FinalTableModel(finalList));

jScrollPane1.setViewportView(jTable1);

想法是JTable将通过调用getValueAt(row,col)自动请求模型中的数据.

Netbeans可以很容易地将模型分配给JTable.该模型是JTable的属性.单击“…”按钮,然后选择“自定义代码”.在下面创建一个模型实例.来源:http://www.icode9.com/content-1-247601.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值