summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2025-12-07 17:30:11 -0500
committerBenjamin Culkin <scorpress@gmail.com>2025-12-07 17:30:11 -0500
commit15b66b44c3beaf64d58e39870b62eee5a48ba2b3 (patch)
tree4db44d98465ea1bd961e6f1a319b91a59f90a4ed
parent9955011dad278183c77dcebb74864ace8ad52e3c (diff)
Add a simple delegate renderer for JList
Adds a simple delegate renderer for JLists, for cases where you just want custom text for a list item
-rw-r--r--base/src/main/java/bjc/utils/gui/DelegateListCellRenderer.java54
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;
+ }
+
+}