java-org.hwo.ui/src/org/hwo/ui/DefaultCellEditor.java

109 lines
2.1 KiB
Java

package org.hwo.ui;
import java.awt.Container;
import java.awt.Rectangle;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JTextField;
import org.hwo.ui.treetable.TreeTable;
public class DefaultCellEditor implements CellEditor {
private List<CellEditorListener> editorListeners;
private JTextField textField;
private TreeTable treeTable;
private Object value;
public DefaultCellEditor()
{
editorListeners = new LinkedList<CellEditorListener>();
}
@Override
public void addCellEditorListener(CellEditorListener listener) {
editorListeners.add(listener);
}
@Override
public void removeCellEditorListener(CellEditorListener listener) {
editorListeners.remove(listener);
}
private void fireEditBegin()
{
CellEditorArgs args = new CellEditorArgs(this, value, treeTable);
for (CellEditorListener listener: editorListeners)
listener.editBegin(args);
}
private void fireEditFinish()
{
CellEditorArgs args = new CellEditorArgs(this, value, treeTable);
for (CellEditorListener listener: editorListeners)
listener.editFinished(args);
}
private void fireEditCancel()
{
CellEditorArgs args = new CellEditorArgs(this, value, treeTable);
for (CellEditorListener listener: editorListeners)
listener.editCanceled(args);
}
private void destroyTextField()
{
textField.setVisible(false);
Container parent = textField.getParent();
parent.remove(textField);
textField = null;
}
@Override
public boolean editBegin(TreeTable treeTable, Rectangle rect, Object value) {
if (textField != null)
editCancel();
this.treeTable = treeTable;
this.value = value;
this.textField = new JTextField();
treeTable.add(textField);
textField.setBounds(rect);
textField.requestFocusInWindow();
textField.repaint();
fireEditBegin();
return true;
}
@Override
public void editCancel() {
if (textField != null)
{
destroyTextField();
fireEditCancel();
}
}
@Override
public void editFinish() {
if (this.textField != null)
{
this.value = this.textField.getText();
destroyTextField();
fireEditFinish();
}
}
}