11

Swing でマウス ホイール リスナーをオーバーライドしたいのですが、Control ボタンが押されている場合のみです。リスナーは JPanel にアタッチされるため、ホイールをスクロールすると JScrollPane がスクロールし、コントロール ボタンを押してホイールをスクロールするとズームインします。オーバーライドする前に、JScrollPane のデフォルトのスクロールが (明らかに) 機能します。私自身のリスナーと。これが私のコードです:

mainPanel.addMouseWheelListener(new MouseWheelListener(){
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
            int notches = e.getWheelRotation();

            if (notches < 0) {
                redrawOnZoom(true);
            } else {
                redrawOnZoom(false);
            }
        }
    }
});

「マウスが単独でスクロールされた場合、デフォルトの JScrollPane スクロール動作を行いますが、Ctrl が押された場合はズームします」のような言い方はありますか?

4

2 に答える 2

8

イベントを処理したくない場合は、イベントをその親にディスパッチできます。

final MouseWheelListener wheel = new MouseWheelListener() {

    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        // handle some events here and dispatch others
        if (shouldHandleHere(e)) {
            LOG.info("do-my-own-stuff");
        } else {
            LOG.info("dispatch-to-parent");
            e.getComponent().getParent().dispatchEvent(e);
        } 
    }

    public boolean shouldHandleHere(MouseWheelEvent e) {
        return (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0;
    }
};
于 2012-11-05T11:06:26.033 に答える
0

ヒント: をオーバーライドしmouseWheelListenerます。

2 つの機能:scroll()およびその他zoom

CTRL keyPress内部リスナーをチェックします。

押された場合、zoom()elseを呼び出しますscroll()

ガイドについては、スイングリスナーの書き方を参照してください。

于 2012-11-05T10:37:32.953 に答える