16
16
import java .awt .event .MouseWheelEvent ;
17
17
import java .awt .event .MouseWheelListener ;
18
18
import java .awt .event .KeyEvent ;
19
+ import java .util .Arrays ;
19
20
20
21
/**
21
22
* A class that provides scrolling capabilities to a long menu dropdown or
@@ -33,6 +34,7 @@ public class MenuScroller {
33
34
34
35
private JPopupMenu menu ;
35
36
private Component [] menuItems ;
37
+ private Component [] allMenuItems ;
36
38
private MenuScrollItem upItem ;
37
39
private MenuScrollItem downItem ;
38
40
private final MenuScrollListener menuListener = new MenuScrollListener ();
@@ -539,7 +541,8 @@ public void popupMenuCanceled(PopupMenuEvent e) {
539
541
}
540
542
541
543
private void setMenuItems () {
542
- menuItems = menu .getComponents ();
544
+ allMenuItems = menu .getComponents ();
545
+ menuItems = Arrays .stream (allMenuItems ).filter (x -> x .isVisible ()).toArray (Component []::new );
543
546
if (keepVisibleIndex >= topFixedCount
544
547
&& keepVisibleIndex <= menuItems .length - bottomFixedCount
545
548
&& (keepVisibleIndex > firstIndex + scrollCount
@@ -554,7 +557,7 @@ private void setMenuItems() {
554
557
555
558
private void restoreMenuItems () {
556
559
menu .removeAll ();
557
- for (Component component : menuItems ) {
560
+ for (Component component : allMenuItems ) {
558
561
menu .add (component );
559
562
}
560
563
}
0 commit comments