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();
}
}
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
Per quanto riguarda il commento sullo scorrimento lento, vedere la mia modifica sopra. – camickr
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