代码之家  ›  专栏  ›  技术社区  ›  x__dos

将模型类与JTable中的整行关联

  •  0
  • x__dos  · 技术社区  · 16 年前

    如何将模型类与JTable中的整行相关联,以便按行号获得到模型类的链接?

    4 回复  |  直到 16 年前
        1
  •  1
  •   camickr    16 年前

    对不起,我看不出我该怎么办 MyBusinessObject实例关联 具有指定行

    我已经编写了一个通用的RowTableModel来实现这一点。它是一个抽象类,但是,您可以使用 BeanTableModel

    编辑:

    在示例末尾添加以下两行:

    frame.setVisible(true);
    JButton first = model.getRow(0);
    System.out.println(first);
    
        2
  •  1
  •   jfpoilpret    16 年前

    我建议你看看 GlazedLists 它适用于任何遵循javabean约定的域模型对象(getter/setter)。

    文档很好,也有很好的例子。

    GlazedList还提供了其他有趣的特性(如过滤),如果您需要的话。

        3
  •  0
  •   David    16 年前

    您可以通过定义TableModel的实现来处理这个问题( http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/TableModel.html )TableModel类可以按自己的喜好存储数据。例如,您可以有一个对象列表,其中列表中的每个元素代表一整行。

        4
  •  0
  •   Adamski    16 年前
    // 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.
    }