2010-05-16 9 views
5

Come molti mouse e trackpad moderni, il mio laptop supporta lo scorrimento verticale e orizzontale. È una caratteristica avvincente una volta che ci si abitua. Voglio semplicemente che le mie app Java supportino lo scorrimento orizzontale tramite trackpad/rotellina del mouse, ma ovunque cerco sembra che ciò non sia possibile in Java. comportamentoCome utilizzare il trackpad per la rotellina del mouse orizzontale per scorrere in un ScrollPane AWT Java

voglio davvero che qualcuno 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 Sono lavorando su. In effetti, per qualsiasi app posso immaginare! Ho investito un po 'di tempo nel backend Java, quindi mi piacerebbe davvero trovare una soluzione per questa cosa apparentemente semplice.

Domanda è che cosa posso fare per implementare questo comportamento? Gli eventi raw a livello di sistema operativo mi sono stati esposti da java, dovrei quindi 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(); 
    } 
} 

risposta

1

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

Mi aspetto che lo sviluppo sia eseguito in Swing non AWT.

Edit:

Si dovrebbe essere in grado di utilizzare il Mouse Wheel Controller per personalizzare la velocità di scorrimento. Non l'ho mai provato con lo scorrimento orizzontale, fammi sapere se funziona.

+0

Grazie, Swing funziona, anche se più lentamente che AWT, ma potrebbe essere solo la configurazione predefinita della ruota. Volevo davvero usare AWT per i controlli del sistema operativo, ma ora passerò a swing, la maggior parte dell'interfaccia utente verrà comunque sostituita da me. – blissapp

+0

Per quanto riguarda il commento sullo scorrimento lento, vedere la mia modifica sopra. – camickr

+0

Grazie per l'aggiornamento. Ho provato quella classe Mouse Wheel Controller, ma ha reso lo scorrimento lento e irregolare sul mio hardware. La mia soluzione finale era usare il metodo setUnitIncrement() sugli ScrollBars stessi, ho aggiunto i dettagli al codice sopra. – blissapp

1

Gli eventi di navigazione sul trackpad del mio MacBookPro sono gestiti fuori dalla scatola. Nota: esiste un metodo su JScrollPane per abilitare gli eventi wheel: setWheelScrollingEnabled

Problemi correlati