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(); } } }