2010-05-16 8 views
5

Al igual que muchos mouse y trackpads modernos, mi computadora portátil admite el desplazamiento vertical y horizontal. Es una característica adictiva una vez que te acostumbras. Simplemente quiero que mis aplicaciones de Java admitan el desplazamiento horizontal a través del trackpad/mousewheel, pero en todas partes que busco parece que esto no es posible en Java. comportamientoCómo usar mi trackpad para desplazamiento horizontal de la rueda del mouse en un ScrollPane de Java AWT

Realmente quiero que alguien me diga que estoy haciendo mal de alguna manera, esta función ya está solicitada: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

La imposibilidad de hacer tal cosa sencilla es en realidad un factor decisivo para la aplicación que estoy trabajando en. De hecho, ¡para cualquier aplicación que pueda imaginar! He invertido un poco de tiempo en el back-end de Java, así que realmente me gustaría encontrar una solución para esta cosa aparentemente simple.

Pregunta es qué podría hacer para implementar este comportamiento? ¿Están expuestos los eventos de nivel de sistema operativo sin procesar a mí por Java? ¿Tendría que escribir esto desde cero?

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

    } 

} 

ejemplo oscilación trabaja con tanto horizontal como vertical de desplazamiento

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

Respuesta

1

Esto es apoyado por defecto en oscilación aunque scolling vertical tiene prioridad sobre el desplazamiento horizontal cuando ambas barras de desplazamiento son visibles.

Esperaría que se haga un nuevo desarrollo en Swing not AWT.

Editar:

Usted debe ser capaz de utilizar el Mouse Wheel Controller para personalizar la velocidad de desplazamiento. Nunca lo he probado en desplazamiento horizontal, avíseme si funciona.

+0

Gracias, Swing funciona, aunque más lentamente que AWT, pero esa podría ser la configuración predeterminada de la rueda. Realmente quería usar AWT para los controles del sistema operativo, pero ahora cambiaré a swing, de todos modos la mayor parte de mi IU será anulada. – blissapp

+0

En relación con el comentario sobre el desplazamiento lento, consulte mi edición anterior. – camickr

+0

Gracias por la actualización. Intenté esa clase de Controlador de rueda del mouse, pero hizo que el desplazamiento fuera lento y espasmódico en mi hardware. Mi solución final fue utilizar el método setUnitIncrement() en ScrollBars, agregué los detalles al código anterior. – blissapp

1

Los eventos de navegación en el panel táctil de mi MacBookPro se manejan de forma inmediata. Tenga en cuenta que hay un método en JScrollPane para habilitar eventos de rueda: setWheelScrollingEnabled

Cuestiones relacionadas