diff --git a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java index c7c31211d..3c59592ec 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java +++ b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java @@ -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 extends JComboBox { 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 extends JComboBox { 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() + ")", "$1");