Fix JMenu deselection issue
This commit is contained in:
parent
a38230a05e
commit
4dbbc0f4fd
@ -24,7 +24,6 @@ import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.SwingUtilities;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
@ -211,11 +211,40 @@ public class GroupableAndSearchableComboBox<G extends Group, T extends Groupable
|
||||
return new ArrayList<>(uniqueItems);
|
||||
}
|
||||
|
||||
static class DeselectMenuListener extends MouseAdapter {
|
||||
final List<JMenu> groupMenus;
|
||||
final JMenu ownMenu;
|
||||
|
||||
DeselectMenuListener(List<JMenu> groupMenus, JMenu ownMenu) {
|
||||
this.groupMenus = groupMenus;
|
||||
this.ownMenu = ownMenu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
super.mouseEntered(e);
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
for (JMenu groupMenu : groupMenus) {
|
||||
if (groupMenu != ownMenu) {
|
||||
groupMenu.setSelected(false);
|
||||
groupMenu.setPopupMenuVisible(false);
|
||||
}
|
||||
}
|
||||
if (ownMenu != null) {
|
||||
ownMenu.setSelected(true);
|
||||
ownMenu.setPopupMenuVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private JPopupMenu createGroupsPopup() {
|
||||
final JPopupMenu menu = new JPopupMenu();
|
||||
final List<JMenu> groupMenus = new ArrayList<>();
|
||||
|
||||
// Add the search field at the top
|
||||
menu.add(searchFieldGroups);
|
||||
searchFieldGroups.addMouseListener(new DeselectMenuListener(groupMenus, null));
|
||||
menu.addSeparator();
|
||||
|
||||
// Fill the menu with the groups
|
||||
@ -244,13 +273,16 @@ public class GroupableAndSearchableComboBox<G extends Group, T extends Groupable
|
||||
}
|
||||
}
|
||||
|
||||
groupMenus.add(groupMenu);
|
||||
menu.add(groupMenu);
|
||||
groupMenu.addMouseListener(new DeselectMenuListener(groupMenus, groupMenu));
|
||||
}
|
||||
|
||||
// Extra widgets
|
||||
if (extraGroupPopupWidgets != null) {
|
||||
for (Component widget : extraGroupPopupWidgets) {
|
||||
menu.add(widget);
|
||||
widget.addMouseListener(new DeselectMenuListener(groupMenus, null));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user