如何将我的模型类与JTable中的整行相关联,以便按行号获取模型类的链接?
答案 0 :(得分:1)
抱歉,但我看不出怎样才能得到 MyBusinessObject实例关联 具有指定的行
好吧,您需要添加一个getRow(...)方法来返回相应的业务对象。
我写了一个通用的RowTableModel来做到这一点。它是一个抽象类,但是,您可以使用扩展RowTableModel的BeanTableModel。或者该示例向您展示了如何通过实现几种方法来轻松扩展RowTableModel。
编辑:
将以下两行添加到示例的末尾:
frame.setVisible(true);
JButton first = model.getRow(0);
System.out.println(first);
答案 1 :(得分:1)
我建议你看看GlazedLists哪个适用于遵循Java Beans约定(getter / setter)的任何Domain Model对象。
文档非常好,也有很好的例子。
如果需要,GlazedLists还会带来其他有趣的功能(例如过滤)。
答案 2 :(得分:0)
您可以通过定义TableModel的实现来处理此问题。 (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/TableModel.html)您的TableModel类可以随意存储您的数据。因此,例如,您可以拥有一个对象列表,其中列表中的每个元素代表整行。
答案 3 :(得分:0)
// Define underlying business object:
public class MyBusinessObject {
private final int i;
private final double d;
private final String s;
public MyBusinessObject(int i, double d, String s) {
this.i = i;
this.d = d;
this.s = s;
}
public int getI() { return i; }
public double getD() { return d; }
public String getS() { return s; }
}
// Define TableModel implementation that "sits on" MyBusinessObject:
public class MyTableModel extends AbstractTableModel {
private static final String[] COLUMN_NAMES = { "i", "d", "s" };
private static final Class<?>[] COLUMN_CLASSES = { Integer.class, Double.class, String.class };
static {
assert COLUMN_NAMES.length == COLUMN_CLASSES.length;
}
// Collection of business objects. Use ArrayList for efficient random access.
private final List<MyBusinessObject> bizObj = new ArrayList<MyBusinessObject>();
// TableModel methods delegate through to collection of MyBusinessObject.
public int getColumnCount() { return COLUMN_NAMES.length; }
public String[] getColumnNames() { return COLUMN_NAMES; }
public Class<?>[] getColumnClasses() { return COLUMN_CLASSES; }
public Object getValueAt(int row, int col) {
Object ret;
MyBusinessObject bo = bizObj.get(row);
switch(col) {
case 1:
ret = bo.getI();
break;
case 2:
ret = bo.getD();
break;
case 3:
ret = bo.getS();
break;
default:
throw new IllegalArgumentException("Invalid column index: " + col);
}
return ret;
}
// Additional methods for updating the collection.
public void addBusinessObject(MyBusinessObject bo) {
bizObj.add(bo);
int i = bizObj.size() - 1;
fireTableRowsInserted(i, i);
}
// ... etc.
}