package com.revolsys.swing.field; import java.awt.Component; import java.util.function.Function; import javax.swing.DefaultListCellRenderer; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; public class FunctionStringConverter<T> extends ObjectToStringConverter implements ListCellRenderer<T> { private int horizontalAlignment = JLabel.LEFT; private final DefaultListCellRenderer renderer = new DefaultListCellRenderer(); private final Function<Object, String> function; public FunctionStringConverter(final Function<Object, String> function) { this.function = function; } public int getHorizontalAlignment() { return this.horizontalAlignment; } @Override public Component getListCellRendererComponent(final JList<? extends T> list, final T value, final int index, final boolean isSelected, final boolean cellHasFocus) { final String text = getPreferredStringForItem(value); this.renderer.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus); this.renderer.setText(text); this.renderer.setHorizontalAlignment(this.horizontalAlignment); return this.renderer; } @Override public String getPreferredStringForItem(final Object item) { if (item == null) { return ""; } else { return this.function.apply(item); } } public void setHorizontalAlignment(final int horizontalAlignment) { this.horizontalAlignment = horizontalAlignment; } }