3
3
*/
4
4
package processing .app .tools ;
5
5
6
+ import java .awt .BorderLayout ;
6
7
import java .awt .Color ;
7
8
import java .awt .Component ;
8
9
import java .awt .Dimension ;
9
10
import java .awt .Graphics ;
10
11
import java .awt .event .ActionEvent ;
11
12
import java .awt .event .ActionListener ;
13
+ import java .awt .event .MouseWheelEvent ;
14
+ import java .awt .event .MouseWheelListener ;
15
+
12
16
import javax .swing .Icon ;
13
17
import javax .swing .JComponent ;
14
18
import javax .swing .JMenu ;
20
24
import javax .swing .event .ChangeListener ;
21
25
import javax .swing .event .PopupMenuEvent ;
22
26
import javax .swing .event .PopupMenuListener ;
23
- import javax .swing .plaf .* ;
27
+ import javax .swing .plaf .ButtonUI ;
24
28
25
29
/**
26
30
* A class that provides scrolling capabilities to a long menu dropdown or
@@ -42,6 +46,7 @@ public class MenuScroller {
42
46
private MenuScrollItem upItem ;
43
47
private MenuScrollItem downItem ;
44
48
private final MenuScrollListener menuListener = new MenuScrollListener ();
49
+ private final MouseScrollListener mouseWheelListener = new MouseScrollListener ();
45
50
private int scrollCount ;
46
51
private int interval ;
47
52
private int topFixedCount ;
@@ -320,6 +325,7 @@ public MenuScroller(JPopupMenu menu, int scrollCount, int interval,
320
325
321
326
this .menu = menu ;
322
327
menu .addPopupMenuListener (menuListener );
328
+ menu .addMouseWheelListener (mouseWheelListener );
323
329
}
324
330
325
331
/**
@@ -446,6 +452,7 @@ public void keepVisible(int index) {
446
452
public void dispose () {
447
453
if (menu != null ) {
448
454
menu .removePopupMenuListener (menuListener );
455
+ menu .removeMouseWheelListener (mouseWheelListener );
449
456
menu = null ;
450
457
}
451
458
}
@@ -497,6 +504,14 @@ private void refreshMenu() {
497
504
}
498
505
}
499
506
507
+ private class MouseScrollListener implements MouseWheelListener {
508
+ public void mouseWheelMoved (MouseWheelEvent mwe ) {
509
+ firstIndex += mwe .getWheelRotation ();
510
+ refreshMenu ();
511
+ mwe .consume ();
512
+ }
513
+ }
514
+
500
515
private class MenuScrollListener implements PopupMenuListener {
501
516
502
517
@ Override
@@ -555,6 +570,7 @@ private void restoreMenuItems() {
555
570
}
556
571
}
557
572
573
+ @ SuppressWarnings ("serial" )
558
574
private class MenuScrollTimer extends Timer {
559
575
560
576
public MenuScrollTimer (final int increment , int interval ) {
@@ -569,6 +585,7 @@ public void actionPerformed(ActionEvent e) {
569
585
}
570
586
}
571
587
588
+ @ SuppressWarnings ("serial" )
572
589
private class MenuScrollItem extends JMenuItem
573
590
implements ChangeListener {
574
591
0 commit comments