Somewhat fix menu items still being opened when not hovered over
This commit is contained in:
parent
45dcf0d81d
commit
a27ab137cc
@ -213,6 +213,7 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
|
|||||||
|
|
||||||
private JPopupMenu createGroupsPopup() {
|
private JPopupMenu createGroupsPopup() {
|
||||||
final JPopupMenu menu = new JPopupMenu();
|
final JPopupMenu menu = new JPopupMenu();
|
||||||
|
MenuItemMouseListener menuItemListener = new MenuItemMouseListener();
|
||||||
|
|
||||||
// Add the search field at the top
|
// Add the search field at the top
|
||||||
menu.add(searchFieldGroups);
|
menu.add(searchFieldGroups);
|
||||||
@ -226,10 +227,11 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
|
|||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
// If the group contains the selected item, draw a checkbox
|
// If the group contains the selected item, draw a checkbox
|
||||||
if (containsSelectedItem(group, (T) SearchableAndGroupableComboBox.this.getSelectedItem())) {
|
if (containsSelectedItem(group, (T) SearchableAndGroupableComboBox.this.getSelectedItem())) {
|
||||||
g.drawString(CHECKMARK, CHECKMARK_X_OFFSET, getHeight() - CHECKMARK_Y_OFFSET); // Unicode for checked checkbox
|
g.drawString(CHECKMARK, CHECKMARK_X_OFFSET, getHeight() - CHECKMARK_Y_OFFSET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
groupMenu.addMouseListener(menuItemListener);
|
||||||
List<T> itemsForGroup = itemGroupMap.get(group);
|
List<T> itemsForGroup = itemGroupMap.get(group);
|
||||||
|
|
||||||
if (itemsForGroup != null) {
|
if (itemsForGroup != null) {
|
||||||
@ -265,6 +267,30 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
|
|||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class MenuItemMouseListener extends MouseAdapter {
|
||||||
|
private JMenu currentMenu;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseEntered(MouseEvent e) {
|
||||||
|
if (e.getSource() instanceof JMenu) {
|
||||||
|
currentMenu = (JMenu) e.getSource();
|
||||||
|
currentMenu.setPopupMenuVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseExited(MouseEvent e) {
|
||||||
|
if (currentMenu != null && !isMouseOverMenu(currentMenu, e.getPoint())) {
|
||||||
|
currentMenu.setPopupMenuVisible(false);
|
||||||
|
currentMenu = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isMouseOverMenu(JMenu menu, Point point) {
|
||||||
|
return menu.getBounds().contains(SwingUtilities.convertPoint(menu.getParent(), point, menu));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private JPopupMenu createSearchPopup() {
|
private JPopupMenu createSearchPopup() {
|
||||||
final JPopupMenu menu = new JPopupMenu();
|
final JPopupMenu menu = new JPopupMenu();
|
||||||
menu.setLayout(new BorderLayout());
|
menu.setLayout(new BorderLayout());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user