package com.revolsys.swing.listener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.function.Consumer; import com.revolsys.swing.field.ComboBox; import com.revolsys.swing.parallel.Invoke; public class ConsumerSelectedItemListener<T> implements ItemListener { public static <V> void addItemListener(final ComboBox<V> comboBox, final Consumer<V> consumer) { final ItemListener listener = new ConsumerSelectedItemListener<>(consumer); comboBox.addItemListener(listener); } private final boolean invokeLater; private final Consumer<T> consumer; public ConsumerSelectedItemListener(final boolean invokeLater, final Consumer<T> consumer) { this.consumer = consumer; this.invokeLater = invokeLater; } public ConsumerSelectedItemListener(final Consumer<T> consumer) { this(true, consumer); } @Override public void itemStateChanged(final ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { @SuppressWarnings("unchecked") final T item = (T)e.getItem(); if (this.invokeLater) { Invoke.later(() -> this.consumer.accept(item)); } else { this.consumer.accept(item); } } } }