问题一:
我在jtable中设置了一列数据为Number类型。但当编辑此列一个Cell时输入的是字母,普通是方框变
红色,我想用事件监控的方式来提醒输入的有效性。所以怎样取得关于cell的事件???
问题二:
在Jtable的事件中,发现只有当Table数据改变的事件,并没有一个关于具体改变Cell的事件啊???谢谢大虾们!

解决方案 »

  1.   

    你可以实现自己的javax.swing.table.TableCellEditor。在里头的编辑组件添加监听。亦或,你实例化javax.swing.DefaultCellEditor后,然后获取编辑组件getTableCellEditorComponent对象,然后对它添加监听。
      

  2.   

    jTable1.getModel().addTableModelListener(new TableModelListener(){
                public void tableChanged(TableModelEvent e) {
                    /**
                     *
                     */
                }
                
            });
      

  3.   

    利用继承AbstractTableModel抽象类所产生的JTable内容是不能被修改的。如果要修改的话,只要覆写AbstractTableModel抽象类中的isCellEditable()方法和setValueAt()方法即可。    public boolean isCellEditable(int rowIndex,int columnIndex){
            return ture;
       }   public void setValueAt(Object value,int row,int col){
         
             p[row][col]=value;
             fireTableCellUpdated(row,col);
       }
      

  4.   

    jTable1.getModel().addTableModelListener(new TableModelListener(){
                public void tableChanged(TableModelEvent e) {
                    /**
                     *
                     */
                }
                
            });
      

  5.   

    jTable1.getModel().addTableModelListener(new TableModelListener(){
                public void tableChanged(TableModelEvent e) {
                }
                
            });
      

  6.   

    package com.cognosense.icp.admin.view.search;import java.awt.Dimension;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;import javax.swing.JOptionPane;
    import javax.swing.JTextField;public class TableInput extends JTextField{
    private boolean isNumber = false;
    public boolean error = false;

    public ICPInput(boolean isNumber){
    super();
    this.isNumber = isNumber;
    setPreferredSize(new Dimension(200, 50));

    this.addFocusListener(new FocusListener(){
    public void focusGained(FocusEvent e) {
    // TODO Auto-generated method stub
    } public void focusLost(FocusEvent e) {
    // TODO Auto-generated method stub
    if(!check()){
    error();
    }
    }
    });
    }

    private void error(){
    JOptionPane.showMessageDialog(null, "Invalid number!"); }

    private boolean check(){
    try{
    if(isNumber && !getText().equals("")){
    Double.parseDouble(this.getText());
    }
    return true;
    }catch(Exception e){
    this.setText("");
    return false;
    }
    }
    } class ValueTableCellEditor extends AbstractCellEditor implements TableCellEditor{
    private ICPInput numberInput = new ICPInput(true);
    private ICPInput stringInput = new ICPInput(false); public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    // TODO Auto-generated method stub
                            return numberInput;
    }

    public Object getCellEditorValue() {
    // TODO Auto-generated method stub return numberInput.getText();

    }
    }
      

  7.   

    实现getTableCellEditorComponent()方法,返回一个jTextField,这个jTextField中使用document