/**
*
*/
package com.horstmann.violet.product.diagram.propertyeditor.baseeditors;
import com.horstmann.violet.product.diagram.property.text.LineText;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.beans.PropertyEditorSupport;
import java.util.HashSet;
import java.util.Set;
public abstract class LineTextEditor extends PropertyEditorSupport
{
protected abstract void setSourceEditor();
protected abstract LineText getSourceEditor();
protected abstract JTextComponent createTextComponent();
public boolean supportsCustomEditor()
{
return true;
}
public Component getCustomEditor()
{
setSourceEditor();
final JPanel panel = new JPanel();
panel.add(getTextEditorComponent());
return panel;
}
private JComponent getTextEditorComponent()
{
if (this.textEditorComponent == null)
{
final JTextComponent textComponent = createTextComponent();
textComponent.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, tab);
textComponent.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, shiftTab);
textComponent.setText(getSourceEditor().toEdit());
textComponent.getDocument().addDocumentListener(new DocumentListener()
{
public void insertUpdate(DocumentEvent e)
{
getSourceEditor().setText(textComponent.getText());
firePropertyChange();
}
public void removeUpdate(DocumentEvent e)
{
getSourceEditor().setText(textComponent.getText());
firePropertyChange();
}
public void changedUpdate(DocumentEvent e)
{
}
});
this.textEditorComponent = createScrollPanel(textComponent);
}
return this.textEditorComponent;
}
protected JComponent createScrollPanel(JTextComponent textComponent)
{
return textComponent;
}
protected JComponent textEditorComponent;
protected static final int COLUMNS = 30;
protected static Set<KeyStroke> tab = new HashSet<KeyStroke>(1);
protected static Set<KeyStroke> shiftTab = new HashSet<KeyStroke>(1);
static
{
tab.add(KeyStroke.getKeyStroke("TAB"));
shiftTab.add(KeyStroke.getKeyStroke("shift TAB"));
}
}