Add checkmark for the currently selected item

This commit is contained in:
SiboVG 2024-08-07 11:28:15 +02:00
parent 481d9a7355
commit 98da7340fe

View File

@ -21,6 +21,7 @@ import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
@ -196,7 +197,16 @@ public class SearchableAndCategorizableComboBox<E, T> extends JComboBox<T> {
if (itemsForGroup != null) {
for (T item : itemsForGroup) {
JMenuItem itemMenu = new JMenuItem(item.toString());
JMenuItem itemMenu = new JMenuItem(item.toString()) {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// If the item is currently selected, draw a checkmark before it
if (item.equals(SearchableAndCategorizableComboBox.this.getSelectedItem())) {
g.drawString("\u2713 ", 5, getHeight() - 5);
}
}
};
itemMenu.addActionListener(e -> {
setSelectedItem(item);
});
@ -240,6 +250,11 @@ public class SearchableAndCategorizableComboBox<E, T> extends JComboBox<T> {
T item = (T) value;
String itemName = item.toString();
// If the item is currently selected, draw a checkmark before it
if (item.equals(getSelectedItem())) {
itemName = "\u2713 " + itemName;
}
if (itemName.toLowerCase().contains(searchFieldSearch.getText().toLowerCase())) {
// Use HTML to underline matching text
itemName = itemName.replaceAll("(?i)(" + searchFieldSearch.getText() + ")", "<u>$1</u>");