Wie mein Trackpad für horizontales Mausrad Scrollen in einem Java AWT ScrollPane verwenden

StackOverflow https://stackoverflow.com/questions/2843314

Frage

Wie viele modernen Mäuse und Touchpads, unterstützt mein Laptop vertikale und horizontale Scrollen. Es ist ein süchtig machendes Feature, wenn Sie sich daran gewöhnen. Ich möchte einfach meine Java-Anwendungen horizontales Scrollen über das Trackpad / Mausrad zu unterstützen, sondern überall, wo ich suchen es scheint, dass dies in Java nicht möglich ist.

ich wirklich jemand will mir sagen, dass ich irgendwie mache es falsch ist, ist diese Funktion bereits angefordert Verhalten: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

Die Unfähigkeit, diese einfache Sache zu tun, ist eigentlich ein Deal Breaker für die App arbeite ich an. In der Tat, für jede App kann ich vorstellen! Ich habe ein wenig Zeit in dem Java-Backend investiert, so dass ich würde wirklich gern eine Lösung für diese scheinbar einfache Sache zu finden.

Die Frage ist, was könnte ich tun, um dieses Verhalten zu implementieren? Sind rohe OS-Ebene Ereignisse mir auch von Java ausgesetzt, würde ich dann müssen diese von Grund auf neu schreiben?

import java.awt.*;

public class ScrollExample extends Canvas {

    public void paint(Graphics g) {

        g.setColor(Color.green);
        g.fillOval(0,0,400, 400);

    }

    public static void main(String[] args) {

        ScrollExample b = new ScrollExample();
        Frame f = new Frame ("Scroll Example");

        ScrollPane scroller = new ScrollPane (ScrollPane.SCROLLBARS_ALWAYS);
        scroller.add(b,"Center");
        f.setPreferredSize(new Dimension(500,500));
        f.add ("Center",scroller);
        f.pack();
        f.show();

    }

}

Swing-Beispiel funktioniert mit sowohl horizontales und vertikales Scrollen

import java.awt.*;
import javax.swing.*;

public class ScrollExample extends JPanel { 

    public void paint(Graphics g) {

        super.paint(g);

        g.setColor(Color.green);
        g.fillOval(0,0,400, 400);

    }

    public static void main(String[] args) {

        JFrame f = new JFrame ("Scroll Example");
        ScrollExample p = new ScrollExample();
        p.setPreferredSize(new Dimension(1000, 1000));

        JScrollPane scroller = new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.getHorizontalScrollBar().setUnitIncrement(10);
        scroller.getVerticalScrollBar().setUnitIncrement(10);

        f.setPreferredSize(new Dimension(500,500));
        f.add (scroller,BorderLayout.CENTER);
        f.pack();
        f.show();
    }
}
War es hilfreich?

Lösung

Diese standardmäßig in Swing unterstützt wird, obwohl vertikale scolling Vorrang vor dem horizontalen Bildlauf hat, wenn beiden Scrollbalken sichtbar sind.

Ich würde erwarten, neue Entwicklung in Swing getan wird nicht AWT.

Edit:

Es sollte möglich sein, die Mausrad-Controller die Scroll-Geschwindigkeit anpassen. Ich habe es nie versucht, auf das horizontale Scrollen, lassen Sie mich wissen, ob es funktioniert.

Andere Tipps

Die Navigationsereignisse auf meiner MacBookPro des Trackpad aus der Box behandelt werden. Hinweis gibt es ein Verfahren auf JScrollPane ist an Rad Ereignisse zu aktivieren: setWheelScrollingEnabled

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top