|
13 | 13 | import java.awt.event.ActionListener;
|
14 | 14 | import java.awt.event.MouseWheelEvent;
|
15 | 15 | import java.awt.event.MouseWheelListener;
|
| 16 | +import java.awt.event.KeyEvent; |
16 | 17 |
|
17 | 18 | /**
|
18 | 19 | * A class that provides scrolling capabilities to a long menu dropdown or
|
@@ -40,6 +41,7 @@ public class MenuScroller {
|
40 | 41 | private int bottomFixedCount;
|
41 | 42 | private int firstIndex = 0;
|
42 | 43 | private int keepVisibleIndex = -1;
|
| 44 | + private int accelerator = 1; |
43 | 45 |
|
44 | 46 | /**
|
45 | 47 | * Registers a menu to be scrolled with the default number of items to
|
@@ -293,6 +295,25 @@ public MenuScroller(JPopupMenu menu, int scrollCount, int interval,
|
293 | 295 | this.menu = menu;
|
294 | 296 | menu.addPopupMenuListener(menuListener);
|
295 | 297 | menu.addMouseWheelListener(mouseWheelListener);
|
| 298 | + |
| 299 | + ActionListener accel = new ActionListener() { |
| 300 | + @Override |
| 301 | + public void actionPerformed(ActionEvent e) { |
| 302 | + accelerator = 6; |
| 303 | + } |
| 304 | + }; |
| 305 | + |
| 306 | + ActionListener decel = new ActionListener() { |
| 307 | + @Override |
| 308 | + public void actionPerformed(ActionEvent e) { |
| 309 | + accelerator = 1; |
| 310 | + } |
| 311 | + }; |
| 312 | + |
| 313 | + KeyStroke keystroke_accel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false); |
| 314 | + KeyStroke keystroke_decel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, true); |
| 315 | + menu.registerKeyboardAction(accel, "accel", keystroke_accel, JComponent.WHEN_IN_FOCUSED_WINDOW); |
| 316 | + menu.registerKeyboardAction(decel, "decel", keystroke_decel, JComponent.WHEN_IN_FOCUSED_WINDOW); |
296 | 317 | }
|
297 | 318 |
|
298 | 319 | /**
|
@@ -492,7 +513,7 @@ private int getMaximumDrawableMenuItems() {
|
492 | 513 |
|
493 | 514 | private class MouseScrollListener implements MouseWheelListener {
|
494 | 515 | public void mouseWheelMoved(MouseWheelEvent mwe) {
|
495 |
| - firstIndex += mwe.getWheelRotation(); |
| 516 | + firstIndex += mwe.getWheelRotation() * accelerator; |
496 | 517 | refreshMenu();
|
497 | 518 | mwe.consume();
|
498 | 519 | }
|
@@ -544,7 +565,7 @@ public MenuScrollTimer(final int increment, int interval) {
|
544 | 565 |
|
545 | 566 | @Override
|
546 | 567 | public void actionPerformed(ActionEvent e) {
|
547 |
| - firstIndex += increment; |
| 568 | + firstIndex += increment * accelerator; |
548 | 569 | refreshMenu();
|
549 | 570 | }
|
550 | 571 | });
|
|
0 commit comments