第5天:用IntegerEditor extends DefaultCellEditor来解决JTable的某一列数字控制

/**
 * 用来JTable控制输入数字判断
 */

import java.awt.Component;

import javax.swing.DefaultCellEditor;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

import com.sa.fb.pos.utils.DialogUtil;

public class IntegerEditor extends DefaultCellEditor {

    private static final long serialVersionUID = -3781656457614462617L;
    private String oldText;
    public IntegerEditor() {
        super(new JTextField());
        //field.setBorder(BorderFactory.createLineBorder(Color.black));
    }

    public Object getCellEditorValue() {
        String value = (String) delegate.getCellEditorValue();
        if (value != null && value.trim().length() > 0) {
            try {
                Integer.parseInt(value);
            } catch (Throwable t) {
                //JOptionPane.showMessageDialog(null, "请输入实数值! ");
                DialogUtil.alert("请输入实数值! ");
                return oldText;
            }
        }
        return value;
    }

    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int col) {
            oldText = value.toString();
        return super.getTableCellEditorComponent(table, value, isSelected, row,
                col);
    }
    public static void main(String[] arg){
        String[][] data={};
        String[] columnNames={};
        TableModel model = new ReportTableModel(data, columnNames);
        tableColumn = new JTable(model);

        tableColumn.setCellSelectionEnabled(true);
        tableColumn.getTableHeader().setReorderingAllowed(false);//不允许列重新排序
        tableColumn.setRowHeight(23); // 设置表格的行高度

        TableColumnModel TCM=tableColumn.getColumnModel();

        TCM.getColumn(3).setCellEditor(new IntegerEditor());
        TCM.getColumn(4).setCellEditor(new IntegerEditor());
    }
}





import javax.swing.table.AbstractTableModel;
/***
 * 功能:处理JTable,包括现实列表,对列表改动等
 * @author
 *
 */
public class ReportTableModel extends AbstractTableModel {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    Object[][] data;
    Object[] columnNames;

    ReportTableModel(Object[][] data, Object[] columnNames) {
        this.data = data;
        this.columnNames = columnNames;
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public Object getValueAt(int row, int col) {
        // System.out.println("第"+(row+1)+"行"+(col+1)+"列:"+data[row][col]);
        return data[row][col];
    }

    // 该方法不一定要加入AbstractTableModel类,该方法设置列表的标题
    public String getColumnName(int col) {
        return columnNames[col] + "";
    }

    // 通过getClass()方法设置默认的控件,如true与false的默认控件是复选框,
    // 该方法不一定要加入AbstractTableModel类
    public Class getColumnClass(int c) {
        if(null == getValueAt(0, c))
        {//防止某一列没有赋值,Boolean类型的话,直接在VO默认为false,所以在这不判断。
            return String.class;
        }else{
            return getValueAt(0, c).getClass();
        }
    }

    // 定义可以编辑的单元,true表示可编辑,false表示不可编辑

    public boolean isCellEditable(int row, int col) {

        return true;

    }

    // 将改变后的值保存在表格中
    public void setValueAt(Object value, int row, int col) {
        data[row][col] = value;
        System.out.println(row + 1 + "行:" + (col + 1) + "列:" + value);
        fireTableCellUpdated(row, col);
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值