MouseListener для кнопок со стрелками JScrollBar - PullRequest
1 голос
/ 26 марта 2012

http://s019.radikal.ru/i626/1203/ae/8420ef7757f7.png

    JScrollPane.getVerticalScrollBar().addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
                    System.out.println("mouseClicked");
        }
        public void mousePressed(MouseEvent e) {
                    System.out.println("mousePressed");
        }
        public void mouseReleased(MouseEvent e) {
                    System.out.println("mouseReleased");
        }
    });

Это работает, если я нажимаю на полосу, но не работает, когда я нажимаю на кнопки

1 Ответ

1 голос
/ 26 февраля 2013

Кнопки определены в пользовательском интерфейсе JScrollBar, поэтому вам нужно расширить реализацию пользовательского интерфейса по умолчанию. Конечно, это зависит от платформы. В моем примере я покажу вам, как это сделать с BasicScrollBarUI. Вы можете определить пользовательский JScrollBar, вызвав JScrollPane.setVerticalScrollBar(new CustomScrollBar()); В вашей CustomScrollBar вы можете сделать следующее:

public class CustomScrollBar extends JScrollBar {
    public CustomScrollBar() {
        setUI(new CustomUI());
    }
    class CustomUI extends BasicScrollBarUI {
        @Override
        protected void installListeners() {
            super.installListeners();
            if (incrButton != null) {
                incrButton.addMouseListener(new MouseAdapter() {

                    @Override
                    public void mouseClicked(MouseEvent e) {
                        //Increment button is clicked!
                    }
                });
            }
            if (decrButton != null) {
                decrButton.addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        //Decrement button is clicked!
                    }
               });
            }
        }
    }
}

Я тестировал его под XP, но без JScrollPane. Надеюсь, это поможет!

...