问题一:
我在jtable中设置了一列数据为Number类型。但当编辑此列一个Cell时输入的是字母,普通是方框变
红色,我想用事件监控的方式来提醒输入的有效性。所以怎样取得关于cell的事件???
问题二:
在Jtable的事件中,发现只有当Table数据改变的事件,并没有一个关于具体改变Cell的事件啊???谢谢大虾们!
我在jtable中设置了一列数据为Number类型。但当编辑此列一个Cell时输入的是字母,普通是方框变
红色,我想用事件监控的方式来提醒输入的有效性。所以怎样取得关于cell的事件???
问题二:
在Jtable的事件中,发现只有当Table数据改变的事件,并没有一个关于具体改变Cell的事件啊???谢谢大虾们!
public void tableChanged(TableModelEvent e) {
/**
*
*/
}
});
return ture;
} public void setValueAt(Object value,int row,int col){
p[row][col]=value;
fireTableCellUpdated(row,col);
}
public void tableChanged(TableModelEvent e) {
/**
*
*/
}
});
public void tableChanged(TableModelEvent e) {
}
});
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();
}
}