diff options
| -rw-r--r-- | base/src/main/java/bjc/utils/gui/DelegateListCellRenderer.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/gui/DelegateListCellRenderer.java b/base/src/main/java/bjc/utils/gui/DelegateListCellRenderer.java new file mode 100644 index 0000000..d21fa97 --- /dev/null +++ b/base/src/main/java/bjc/utils/gui/DelegateListCellRenderer.java @@ -0,0 +1,54 @@ +package bjc.utils.gui; + +import java.awt.Component; +import java.util.function.Function; + +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.ListCellRenderer; + +/** + * Simple implementation of {@link ListCellRenderer} that uses a custom label. + * + * This renderer does the simple task of using a custom 'toString' method to display text for a given data type. + * + * @param <E> The data-type being displayed + */ +public class DelegateListCellRenderer<E> extends JLabel implements ListCellRenderer<E> { + private static final long serialVersionUID = -3312631037740011026L; + + private Function<E, String> toStringer; + + /** + * Create a new renderer using a given toString function + * + * @param toStringer The toString function to use + */ + public DelegateListCellRenderer(Function<E, String> toStringer) { + super(); + this.toStringer = toStringer; + } + + + @Override + public Component getListCellRendererComponent(JList<? extends E> list, E value, int index, boolean isSelected, + boolean cellHasFocus) { + String val = toStringer.apply(value); + + setText(val); + + if (isSelected) { + setBackground(list.getSelectionBackground()); + setForeground(list.getSelectionForeground()); + } else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + } + + setEnabled(list.isEnabled()); + setFont(list.getFont()); + setOpaque(true); + return this; + } + +} |
