Mac Mighty Mouse horizontales Scrollen

hans

Mitglied
Ich habe ein kleines Programm mit ein JScrollPane mit einem großen Bild.

Wie kann ich mit dem Mausrad horizontal scrollen. Vertikal funktioniert, bewegen ich mein Mausrad aber horizontal nach oben bzw. nach unten und nicht nach links oder rechts.

Mein zweites Problem. Wenn man mit der Maus die ScrollBar bewegt, welcher Listener zeigt mir den aktuellen Wert/Position an.
Der AdjustmentListener gibt mir ja nur den Endwert.

Vielen Dank für die Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
der Satz 'bewegen ich mein Mausrad aber' ist relativ unklar, ich nehme aber an du willst einfach dass beim Scroll horizontal bewegt wird,
das funktioniert bisher auch schon wenn es keine vertikale Scrollbar gibt, reicht dir das? die kann man explizit ausschalten

ansonsten ist die Klasse BasicScrollPaneUI verantwortlich, dort gibts Code a la

Java:
class Handler implements ChangeListener, PropertyChangeListener, MouseWheelListener {

        public void mouseWheelMoved(MouseWheelEvent e) {
            if (scrollpane.isWheelScrollingEnabled() &&
                e.getScrollAmount() != 0) {
                JScrollBar toScroll = scrollpane.getVerticalScrollBar();
                int direction = 0;
                // find which scrollbar to scroll, or return if none
                if (toScroll == null || !toScroll.isVisible()) { 
                    toScroll = scrollpane.getHorizontalScrollBar();
                    if (toScroll == null || !toScroll.isVisible()) { 
                        return;
                    }
                }

dort wird also explizit die vertikale ScrollBar bevorzugt,
um das sauber zu ändern muss man meiner Vermutung nach BasicScrollPaneUI mit 800 Zeilen überschreiben oder zumindest den Listener darin austauschen,
eine einfachere Variante habe ich erfolgreich ausprobiert:
Java:
public class TestGUI  extends JFrame {
    public TestGUI() {
        final long start = System.currentTimeMillis();

        JPanel p = new JPanel();
        p.setPreferredSize(new Dimension(1000, 1000));
        JScrollPane sp = new JScrollPane(p) {
                public JScrollBar getVerticalScrollBar() {
                    StackTraceElement e = Thread.currentThread().getStackTrace()[2];
                    if ("mouseWheelMoved".equals(e.getMethodName())) {
                        return super.getHorizontalScrollBar();
                    }
                    return super.getVerticalScrollBar();
                }
            };
        add(sp);
        setSize(350, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new TestGUI();
    }
}
;)

-----

ein AdjustmentListener, z.B.
Java:
            sp.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener()    {
                    public void adjustmentValueChanged(AdjustmentEvent e)  {
                        System.out.println("s");
                    }
                });
in obigen Code eingefügt, liefert bei mir seitenweise Ausgaben wenn ich mit der Maus die Scrollbar direkt bewege,
bei Mausrad mit großen Sprung wäre es ja klar dass nur wenige Schritte kommen, bei mir sind aber auch ganze 8x "s", was auch immer die Events einzeln bedeuten
 

Marco13

Top Contributor
Ich dachte es ging um die Mäuse, bei denen man das Mausrad so seitlich kippen kann, um explizit horizontal zu scrollen... ?! ???:L
 
S

SlaterB

Gast
ach das gibts doch gar nicht ;)

dann würde ich das jedenfalls erstmal an einer normalen Komponente mit einem MouseWheelListener testen,
ob überhaupt das Event in Java auf irgendeine Art zu unterscheiden ist
 

Ähnliche Java Themen

Neue Themen


Oben