转自:http://www.xuebuyuan.com/672630.html
swing jtable 单元编辑事件(包括通过键盘获取焦点后编辑和鼠标双击后进入编辑状态)
import javax.swing.JTable;
import javax.swing.JTextField;
import ...........
public class MyTable extends JTable {
private String[] header;
private Object[][] value;
public MyTable(String[] header, Object[][] value) {
this.header = header;
this.value = value;
init();
}
private void init() {
DefaultTableModel dtm = new DefaultTableModel(value, header) {
@Override
public boolean isCellEditable(int row, int column) {
JTextField tf = new JTextField();
tf.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
event(e);
};
});
tf.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
tf.setSelectionStart(0);
tf.setSelectionEnd(tf.getText().length());
getColumnModel().getColumn(column).setCellEditor(
new DefaultCellEditor(tf));
return true;
}
};
addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
event();
}
});
}
private void event() {
int row = getSelectedRow();
int column = getSelectedColumn();
DefaultCellEditor obj = (DefaultCellEditor) (getColumnModel()
.getColumn(column).getCellEditor());
if (obj != null) {
JComponent com = (JComponent) obj.getComponent();
Object value = null;
if (com instanceof JTextField) {
value = ((JTextField) com).getText();
} else if (com instanceof JToggleButton) {
value = ((JToggleButton) com).isSelected();
}
System.out.println("row:" + row + " ,column:" + column + " ,value:"
+ value);
}
}
}