package com.vci.client.uif.engine.client.tableArea.editable.editor;
|
|
import java.awt.Component;
|
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyEvent;
|
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeListener;
|
import java.lang.reflect.Constructor;
|
|
import javax.swing.JTable;
|
import javax.swing.JTextField;
|
import javax.swing.table.TableCellEditor;
|
|
import com.vci.client.ui.swing.components.VCIJOptionPane;
|
import com.vci.client.uif.engine.client.controls.BaseCustomControl;
|
import com.vci.client.uif.engine.client.controls.ControlFactory;
|
import com.vci.client.uif.engine.client.tableArea.editable.check.CellValueChecker;
|
|
/**
|
* 自定义类型列的编辑器对象
|
* @author xiongchao
|
*
|
*/
|
public class CustomControlEditor extends BaseCellEditor implements PropertyChangeListener{
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = -7267144630120864152L;
|
|
public CustomControlEditor(JTextField textField) {
|
super(textField);
|
}
|
|
private BaseCustomControl bcc = null;
|
@Override
|
public Component getTableCellEditorComponent(JTable table, Object value,
|
boolean isSelected,
|
int row, int column) {
|
Component compt = super.getTableCellEditorComponent(table, value, isSelected, row, column);
|
if(bcc == null){
|
bcc = (BaseCustomControl) ControlFactory.createControl(getPrmItem());
|
bcc.setParentComponent(getTablePanel());
|
bcc.getTxt().setEditable(true);
|
bcc.addPropertyChangeListener(this);
|
bcc.getTxt().addKeyListener(new KeyAdapter() {
|
@Override
|
public void keyPressed(KeyEvent e) {
|
if(KeyEvent.VK_ENTER == e.getKeyCode()){
|
stopEditing();
|
}
|
}
|
});
|
}
|
bcc.setValue(value.toString());
|
compt = bcc;
|
return compt;
|
}
|
|
private void stopEditing(){
|
TableCellEditor cellEditor = tablePanel.getDataTablePanel().getTable().getCellEditor();
|
if(cellEditor != null){
|
cellEditor.stopCellEditing();
|
}
|
tablePanel.setChanged(true);
|
}
|
|
@Override
|
protected void setCellValue() {
|
super.setCellValue();
|
}
|
|
@Override
|
public Object getCellEditorValue() {
|
return bcc.getTxt().getText();
|
}
|
|
/**
|
* 当前编辑的值是否发生了变更
|
* @return
|
*/
|
@Override
|
protected boolean checkValueChanged(){
|
return true;
|
}
|
@Override
|
public void propertyChange(PropertyChangeEvent evt) {
|
if(evt.getPropertyName().equalsIgnoreCase("valueChange")
|
|| evt.getPropertyName().equalsIgnoreCase("setValue")){
|
String oldValue = evt.getOldValue().toString();
|
String newValue = evt.getNewValue().toString();
|
boolean changed = !oldValue.equals(newValue);
|
tablePanel.setChanged(changed);
|
stopCellEditing();
|
}
|
}
|
|
}
|