/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.forms.components.rt;
import java.awt.event.ItemEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JComboBox;
import javax.swing.text.JTextComponent;
/**
*
* @author mg
*/
public class VComboBox<T> extends JComboBox<T> implements HasValue<T>, HasEmptyText, HasEditable {
protected Object oldValue;
public VComboBox() {
super();
super.addItemListener((ItemEvent e) -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
Object newValue = e.getItem();
if (oldValue != newValue) {
Object wasOldValue = oldValue;
oldValue = newValue;
firePropertyChange(VALUE_PROP_NAME, wasOldValue, newValue);
}
}
});
}
@Override
public T getValue() {
return (T)getModel().getSelectedItem();
}
@Override
public void setValue(T aValue) {
T wasValue = getValue();
if (wasValue != aValue) {
getModel().setSelectedItem(aValue);
if (aValue == null) {
oldValue = null;
firePropertyChange(VALUE_PROP_NAME, wasValue, null);
}
}
}
@Override
public void addValueChangeListener(PropertyChangeListener listener) {
super.addPropertyChangeListener(VALUE_PROP_NAME, listener);
}
@Override
public void removeValueChangeListener(PropertyChangeListener listener) {
super.removePropertyChangeListener(VALUE_PROP_NAME, listener);
}
protected String emptyText;
@Override
public String getEmptyText() {
return emptyText;
}
@Override
public void setEmptyText(String aValue) {
emptyText = aValue;
}
@Override
public boolean getEditable() {
return super.isEditable();
}
public String getText() {
return ((JTextComponent) super.getEditor().getEditorComponent()).getText();
}
public void setText(String aValue) {
if (isEditable()) {
((JTextComponent) super.getEditor().getEditorComponent()).setText(aValue);
}
}
}