Ich entwickle eine Desktop-Anwendung in Netbeans, in der ich eine Editor-Klasse habe, die eine Unterklasse einer Klasse ist, die eine JScrollPane
hat. (JScrollPane
hat zwei JScrollBars
: horizontal & vertikal.) Alles funktioniert wie erwartet einschließlich Scrollen mit dem Mausrad sowohl vertikal (keine Modifikatoren) und horizontal (mit dem Shift Modifier). Eine andere Superklasse (zwischen meiner Klasse und der Klasse JScrollPane
) implementiert das Zoomen (was gut funktioniert (einschließlich Scrollen), indem ich meinen Vergrößerungsfaktor über Menübefehle einstellt). Was ich will, ist in der Lage zu vergrößern/verkleinern mit dem Mausrad, wenn die alt (Option) Taste gedrückt ist (isAltDown()
ist wahr) und Fallback auf die Standard-Scroll (H & V) Verhalten sonst. Hier ist ein Teil meiner Klasse Setup-Code:Java - Scrollen und zoomen mit dem Mausrad?
JScrollPane scrollPane = getPanelScrollPane();
JScrollBar hsb = scrollPane.getHorizontalScrollBar();
JScrollBar vsb = scrollPane.getVerticalScrollBar();
MouseWheelListener mwl = new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.isAltDown()) {
double oldZoom = getZoom();
double amount = Math.pow(1.1, e.getScrollAmount());
if (e.getWheelRotation() > 0) {
//zoom in (amount)
setZoom(oldZoom * amount);
} else {
//zoom out (amount)
setZoom(oldZoom/amount);
}
} else {
// pass the event on to the scroll pane
getParent().dispatchEvent(e);
}
}
};
// add mouse-wheel support
hsb.addMouseWheelListener(mwl);
vsb.addMouseWheelListener(mwl);
Dieses Setup-Code wird immer genannt, aber die mouseWheelMoved
Methode nie aufgerufen wird, wenn ich das Mausrad bewegen (wenn der Cursor über meine Ansicht ist); Die Ansicht scrollt normalerweise weiter (H & V).
Ich habe auch versucht, „implements MouseWheelListener
“ und eine mouseWheelMoved
Methode zu meiner Klasse hinzufügen:
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// (same as mouseWheelMoved above)
}
noch kein Glück ... Was bin ich? (Bearbeiten: Bonus Fragen über propagierende Rad Ereignisse entfernt: beantwortet hier: < How to implement MouseWheelListener for JPanel without breaking its default implementation?>).