Come usare il mio trackpad per lo scorrimento orizzontale rotella del mouse in un Java AWT ScrollPane

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

Domanda

Come molti topi moderno e trackpad, il mio computer portatile supporta lo scorrimento verticale e orizzontale. E 'una caratteristica di dipendenza, una volta che ci si abitua ad esso. Voglio semplicemente il mio applicazioni Java per supportare lo scorrimento orizzontale tramite il trackpad / rotellina del mouse, ma ovunque cerco sembra che questo non è possibile in Java.

comportamento

Ho molta voglia di qualcuno che mi dica che sto facendo male in qualche modo, questa funzione è già richiesto: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

L'incapacità di fare questa cosa semplice è in realtà un insuccesso per l'applicazione su cui sto lavorando. In effetti, per qualsiasi applicazione che posso immaginare! Ho investito un po 'di tempo nel backend Java, quindi mi piacerebbe davvero trovare una soluzione per questa cosa apparentemente semplice.

La domanda è che cosa potrei fare per implementare questo comportamento? Sono eventi non elaborati a livello di sistema operativo, anche esposti a me da Java, avrei quindi bisogno di scrivere questo da zero?

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();

    }

}

esempio oscillazione funziona sia con scorrimento orizzontale e verticale

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();
    }
}
È stato utile?

Soluzione

Questo è supportato per default in Swing sebbene scolling verticale ha priorità su scorrimento orizzontale quando entrambe le barre di scorrimento sono visibili.

mi aspetterei nuovo sviluppo per essere fatto in Swing non AWT.

Modifica:

Si dovrebbe essere in grado di utilizzare il rotellina del mouse controller per personalizzare la velocità di scorrimento. Non ho mai provato su scorrimento orizzontale, fatemi sapere se funziona.

Altri suggerimenti

Gli eventi di navigazione sul trackpad del mio MacBookPro vengono gestiti fuori dalla scatola. Nota c'è un metodo su JScrollPane per attivare gli eventi delle ruote: setWheelScrollingEnabled

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top