SWING学习:JTable实现自定义的编辑单元格 (2)

本文介绍了如何在Swing中使用JTable自定义数据模型AttrTableDataModel,详细讲解了getValueAt、setValueAt、isCellEditable等关键方法,以实现不同列的编辑控件,如ComboBox和文本编辑。通过示例展示了如何创建和设置JTable以展示和编辑数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swing 的JTable 对应有一个数据模型,该数据模型包装了用于显示于表格的数据,为的是便于对数据进行操作处理。具体数据类型可以通过继承AbstractTableModel实现,并且通过setValueAt(Object aValue, int rowIndex, int columnIndex)和isCellEditable(int rowIndex, int columnIndex)两个方法,可以判断在哪个单元格显示哪种控件。

下面为一数据类型具体实现类:

 class AttrTableDataModel extends AbstractTableModel {
  public int getColumnCount() {
   return AttrTableTemplate.columnNames.length;
  }

  public int getRowCount() {
   return AttrTableTemplate.reportAttrNames.length;
  }

  public Object getValueAt(int rowIndex, int columnIndex) {
   short code = AttrTableTemplate.reportAttrNames[rowIndex];
   if (columnIndex == 0) {
    return CellPropertyDefine.getPropertyTitle(code);
   } else if (columnIndex == 1) {
    return cell.getValue(code);
   } else if (columnIndex == 2) {
    return cell.getExpression(code);
   } else {
    return "";
   }
  }

  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
   short code = AttrTableTemplate.reportAttrNames[rowIndex];
   System.out.println(" setValueAt ==" + aValue + "  " + rowIndex
     + "  " + columnIndex);
   if (columnIndex == 1) {
    cell.setValue(code, aValue);
   }
   if (columnIndex == 2) {
    if (aValue != null) {
     cell.setExpression(code, aValue.toString());
    } else {
     cell.setExpression(code, null);
    }
   }
   TableColumn curColumn = attrTable.getColumnModel().getColumn(
     columnIndex);
   curColumn.setCellEditor(null);  //清空编辑控件
  }

  public String getColumnName(int column) {
   return AttrTableTemplate.columnNames[column];
  }

  public boolean isCellEditable(int rowIndex, int columnIndex) {
   System.out.println("isCellEdit==" + rowIndex + " " + columnIndex);
   short code = AttrTableTemplate.reportAttrNames[rowIndex];
   TableColumn curColumn = attrTable.getColumnModel().getColumn(
     columnIndex);
   if (columnIndex == 1) {
    Vector comboItems = CellPropertyDefine.getValues(code, true);
    System.out.println("comboItems==" + comboItems);
    if (comboItems.size() != 0) { //判断是什么编辑控件
     TableCellComboEditor cellCombo = new TableCellComboEditor(
       comboItems);
     cellCombo.setColumn(curColumn);
    }
   }
   if (columnIndex == 2) { //判断是什么编辑控件
    TableCellExpressionEditor cellExp = new TableCellExpressionEditor();
    cellExp.setColumn(curColumn);
   }
   if (columnIndex != 0) {
    return true;
   } else {
    return false;
   }
  }
 }

如何使用该模型示例:

 attrTable = new JTable(new AttrTableDataModel());
  attrTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  attrTable.setCellSelectionEnabled(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值