/*
* Copyright (c) 2005-2016 Vincent Vandenschrick. All rights reserved.
*
* This file is part of the Jspresso framework.
*
* Jspresso is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jspresso is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Jspresso. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jspresso.framework.binding.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import org.jspresso.framework.binding.ConnectorBindingException;
/**
* JFormattedTextFieldConnector connector.
*
* @author Vincent Vandenschrick
*/
public class JFormattedTextFieldConnector extends
JTextComponentConnector<JFormattedTextField> {
/**
* Constructs a new {@code JFormattedTextFieldConnector} instance.
*
* @param id
* the id of the connector.
* @param textField
* the connected JTextField.
*/
public JFormattedTextFieldConnector(String id, JFormattedTextField textField) {
super(id, textField);
}
/**
* {@inheritDoc}
*/
@Override
protected void bindJComponent() {
super.bindJComponent();
getConnectedJComponent().addActionListener(new ActionListener() {
/**
* {@inheritDoc}
*/
@Override
public void actionPerformed(ActionEvent e) {
fireConnectorValueChange();
}
});
getConnectedJComponent().addPropertyChangeListener("value",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
fireConnectorValueChange();
}
});
}
/**
* Gets the value out of the connector text after parsing the string
* representation.
* <p>
* {@inheritDoc}
*/
@Override
protected Object protectedGetConnecteeValue() {
// don't call getValue() due to bad focus event delivery order of
// JFormattedTextField.
// return getConnectedJComponent().getValue();
try {
if (getConnectedJComponent().getText() == null
|| getConnectedJComponent().getText().length() == 0) {
return null;
}
return getConnectedJComponent().getFormatter().stringToValue(
getConnectedJComponent().getText());
} catch (ParseException ex) {
throw new ConnectorBindingException(ex);
}
}
/**
* Sets the value to the connector text after formatting the string
* representation.
* <p>
* {@inheritDoc}
*/
@Override
protected void protectedSetConnecteeValue(Object aValue) {
getConnectedJComponent().setValue(aValue);
}
}