jTable中有String,Integer,Long数据类型,要求String型的单元只能输入字母和数字,3种类型均限制长度。
现在我有JTextField已经实现了String类型的验证,不过用table.getColumnModel().getColumn(t).setCellEditor(new DefaultCellEditor(c));之后还是不能验证jTable的(c是实现了验证功能的JTextField)

解决方案 »

  1.   

    你不用使用JTextField组件来验证内容
    你的TableModel继承AbstractTableModel,然后重写下面的方法private Vector content = null; // 存放JTable中的数据public boolean isCellEditable(int rowIndex, int columnIndex){
        return true; // 所有数据均可修改
    }public void setValueAt(Object value, int row, int col){
        //使修改的内容生效,在这里先判断value是否为你需要的合法数据,合法则修改,否则不理它就可以了
    }写过一个例子,你可以参考下:
    http://community.csdn.net/Expert/topic/4869/4869338.xml?temp=.6329462
      

  2.   

    在setValueAt()中设置不太符合项目要求,要求是输入非法字符直接不显示,而不是可以显示不能提交。
      

  3.   

    class ValueTableCellEditor extends AbstractCellEditor implements TableCellEditor{
    JTextField tblfld;
    String classType;
    int tblLength;
    public ValueTableCellEditor(String tblName,String classType){
    tblfld = new JTextField();
    this.classType = classType;
    try{
             tblLength = Integer.parseInt(getPropertieA(tblName.concat(COMP_ATTR_MAX)));
             }catch(Exception e){
             }
    }
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            if(classType.equals("String")){
             tblfld.setDocument(new TextDocument(tblLength));
             return tblfld;
            }
            else{
             tblfld.setDocument(new TextDocument(tblLength));
             return tblfld;
            }
    }
    public Object getCellEditorValue(){
    return null;
    }
    }
    class TextDocument extends PlainDocument
     {
    int a;
    public TextDocument(int t){
    a = t;
    }
      public void insertString(int offs,String str,
        AttributeSet a)throws BadLocationException{
      if(this.getLength() == this.a)
        str = "";
       super.insertString(offs,str,a);
      }
     }
      

  4.   

    for(int t=0;t<(table.getModel().getColumnCount());t++){
      Class a = table.getModel().getColumnClass(t);
      ValueTableCellEditor cellEdit = new ValueTableCellEditor(compNames.get(i).toString(),a.toString());
      table.getColumnModel().getColumn(t).setCellEditor(cellEdit);
    }