Vaadin 7 Grid column filter

I add filters to my columns sometimes, using the component below ( ultimately, as this is the lowest level component I define ):

public class FieldWithClear<T> extends CustomField<T> {

	/**
	 *
	 */
	private static final long serialVersionUID = -4027223469891991790L;
	final private Class<T> typeParameterClass;
	protected AbstractField<T> field;
	private String clearDescription = "Clear the current value";
	private Button clearFieldBtn = null;

	public FieldWithClear(Class<T> typeParameterClass, AbstractField<T> field ) {
		super();
		this.typeParameterClass = typeParameterClass;
		this.field = field;
	}

	protected FieldWithClear( Class<T> typeParameterClass ) {
		this(typeParameterClass, null);
	}

	protected Component initContent(AbstractField<T> field) {
		this.field = field;

		clearFieldBtn = new Button(FontAwesome.TIMES);
		clearFieldBtn.setDescription(getClearDescription());
		clearFieldBtn.addClickListener(e ->clearField());

		CssLayout layout = new CssLayout();
		layout.addComponents(field, clearFieldBtn);
		layout.setStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP);

		Panel fieldPanel = new Panel( layout );
		fieldPanel.addShortcutListener(new ShortcutListener( "Clear", KeyCode.ESC, null ) {

			/**
			 *
			 */
			private static final long serialVersionUID = 1588726031915209542L;

			@Override
			public void handleAction(Object sender, Object target) {
				if( sender == fieldPanel )
					clearField();
			}
		});

		return fieldPanel;
	}

	/* (non-Javadoc)
	 * @see com.vaadin.ui.CustomField#initContent()
	 */
	@Override
	protected Component initContent() {
		return initContent(field);
	}

	protected void clearField() {
		field.clear();
	}

	/* (non-Javadoc)
	 * @see com.vaadin.ui.AbstractField#getType()
	 */
	@Override
	public Class<? extends T> getType() {
		return typeParameterClass;
	}

	@Override
	public T getValue() {
		return field.getValue();
	}

	@Override
	public void setValue(T newFieldValue) throws ReadOnlyException, ConversionException {
		field.setValue(newFieldValue);
	}

	public String getClearDescription() {
		return clearDescription;
	}

	public void setClearDescription(String clearDescription) {
		this.clearDescription = clearDescription;
		if( clearFieldBtn instanceof Button )
			clearFieldBtn.setDescription(clearDescription);
	}

}

Has anyone found a good way to make the column widths more flexible? In our case, the filter field forces the column to be wider then is really needed for the data in the column.

Do people use filters directly in the Grid ( attached image GridWithFilterInside ), or do people prefer putting filters outside the Grid ( GridWithFilterOutside )? I am looking for the best practices.

If inside the grid is what people tend to like, then it would be great to know how to make the filter size auto-adjust to the best column with based on the data, like it does with no filter inside the grid.
17442302.png
17442305.png