package org.atdl4j.ui.swing.widget; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.util.ArrayList; import java.util.List; import javax.swing.JFormattedTextField; import javax.swing.JLabel; import javax.swing.JPanel; import org.atdl4j.ui.impl.ControlHelper; import org.atdl4j.ui.swing.SwingListener; public class SwingTextFieldWidget extends AbstractSwingWidget<String> { private JFormattedTextField textField; private JLabel label; private JPanel wrapper; public void createWidget(JPanel parent) { // tooltip String tooltip = control.getTooltip(); // label if ( control.getLabel() != null ) { label = new JLabel(); label.setName(getName()+"/label"); label.setText(control.getLabel()); if ( tooltip != null ) label.setToolTipText( tooltip ); } // textField textField = new JFormattedTextField(); textField.setName(getName()+"/text"); // init value if ( ControlHelper.getInitValue( control, getAtdl4jOptions() ) != null ) textField.setText( (String) ControlHelper.getInitValue( control, getAtdl4jOptions() ) ); // tooltip if (tooltip != null) textField.setToolTipText(tooltip); if (label != null){ wrapper = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; c.gridy = 0; c.gridwidth = 1; c.weightx = 1.0; c.weighty = 1.0; c.insets = new Insets(0, 0, 0, 0); wrapper.add( label, c); c.gridx = 1; c.gridy = 0; c.insets = new Insets(0, 0, 0, 0); wrapper.add( textField, c); parent.add(wrapper); } else { parent.add(textField); } textField.setPreferredSize(new Dimension(100, textField.getPreferredSize().height)); textField.revalidate(); } public void setVisible(boolean visible){ if (wrapper != null) wrapper.setVisible(visible); else super.setVisible(visible); } public String getControlValueRaw() { String value = textField.getText(); if ( "".equals( value ) ) { return null; } else { return value; } } public void setValue(String value) { textField.setText( ( value == null ) ? "" : value.toString() ); } public List<Component> getComponents() { List<Component> widgets = new ArrayList<Component>(); if (label != null) widgets.add(label); widgets.add(textField); return widgets; } public List<Component> getComponentsExcludingLabel() { List<Component> widgets = new ArrayList<Component>(); widgets.add(textField); return widgets; } public void addListener(SwingListener listener) { textField.getDocument().addDocumentListener(listener); } public void removeListener(SwingListener listener) { textField.getDocument().removeDocumentListener(listener); } /** * Overridden -- makes the textField appear non-editable vs. the default of disabled. */ public void processConstValueHasBeenSet() { textField.setEditable( false ); } /* * */ protected void processNullValueIndicatorChange(Boolean aOldNullValueInd, Boolean aNewNullValueInd) { if ( Boolean.FALSE.equals( aNewNullValueInd ) ) { textField.setText( "" ); } } /* (non-Javadoc) * @see org.atdl4j.ui.ControlUI#reinit() */ @Override public void processReinit( Object aControlInitValue ) { if ( ( textField != null ) ) { textField.setText( (aControlInitValue != null ) ? (String) aControlInitValue : "" ); } } @Override public List< ? extends Component> createBrickComponents() { List<Component> components = new ArrayList<Component>(); // tooltip String tooltip = control.getTooltip(); // label if ( control.getLabel() != null ) { label = new JLabel(); label.setName(getName()+"/label"); label.setText(control.getLabel()); if ( tooltip != null ) label.setToolTipText( tooltip ); } // textField textField = new JFormattedTextField(); textField.setName(getName()+"/text"); // init value if ( ControlHelper.getInitValue( control, getAtdl4jOptions() ) != null ) textField.setText( (String) ControlHelper.getInitValue( control, getAtdl4jOptions() ) ); // tooltip if (tooltip != null) textField.setToolTipText(tooltip); if (label != null){ components.add( label); } components.add( textField); textField.setPreferredSize(new Dimension(100, textField.getPreferredSize().height)); return components; } }