Пользовательский прослушиватель колес предотвращает прослушивание колес ScrollPane

Я добавляю пользовательский слушатель колесика мыши в свою JPanel, потому что я реализую функцию масштабирования для этой панели, которая работает с Ctrl + колесико мыши. Также мой JPanel находится в JScrollpane. Моя проблема в том; когда я добавляю MouseWheelListener на панель, колесо мыши не работает для области прокрутки, даже если Ctrl не нажат. Я хочу чтобы; колесико мыши работает для масштабирования при нажатии ctrl, а если не нажато, оно должно работать для области прокрутки. Как я могу это сделать?

public class ZoomTest {

    public static void main(String[] args) {
        JPanel jZoomPanel = new JPanel();
        jZoomPanel.setPreferredSize(new Dimension(300, 500));
        jZoomPanel.addMouseWheelListener(new MouseWheelListener() {

            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                if(e.isControlDown()) {
                // TODO implement zoom
                }
            }
        });

        JScrollPane jsc = new JScrollPane(jZoomPanel);

        JFrame jDemoFrame = new JFrame();
        jDemoFrame.getContentPane().add(jsc);
        jDemoFrame.setSize(300, 300);

        jDemoFrame.setVisible(true);
    }

}

person rdonuk    schedule 20.03.2015    source источник


Ответы (1)


Вы должны отправить свое событие следующим образом:

jZoomPanel.addMouseWheelListener(new MouseWheelListener() {

    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        if(e.isControlDown()) {
        // TODO implement zoom
        } else {
            JPanel panel = (JPanel) me.getSource();
            MouseEvent newMe = SwingUtilities.convertMouseEvent(panel, me, jsc);
            jsc.dispatchEvent(me);
        }
    }
});
person SeniorJD    schedule 20.03.2015