Как использовать мой трекпад для горизонтальной прокрутки колесика мыши в Java AWT ScrollPane - PullRequest
6 голосов
/ 16 мая 2010

Как и многие современные мыши и трекпады, мой ноутбук поддерживает вертикальную и горизонтальную прокрутку. Это привыкание, когда вы привыкнете к нему. Я просто хочу, чтобы мои Java-приложения поддерживали горизонтальную прокрутку с помощью трекпада / колесика мыши, но везде, где я ищу, кажется, что это невозможно в Java.

Я действительно хочу, чтобы кто-то сказал мне, что я как-то делаю это неправильно, эта функция уже запрашивает поведение: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

Невозможность сделать эту простую вещь на самом деле нарушает условия приложения, над которым я работаю. Фактически, для любого приложения я могу представить! Я потратил немного времени на бэкэнд Java, поэтому мне бы очень хотелось найти решение для этой, казалось бы, простой вещи.

Вопрос: что я мог сделать, чтобы реализовать это поведение? Являются ли необработанные события уровня ОС даже доступными для меня с помощью Java, нужно ли мне писать это с нуля?

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 работает с горизонтальной и вертикальной прокруткой

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

Ответы [ 2 ]

1 голос
/ 16 мая 2010

Навигационные события на трекпаде моего MacBookPro обрабатываются «из коробки». Обратите внимание, что на JScrollPane есть метод для включения событий колеса: setWheelScrollingEnabled

1 голос
/ 16 мая 2010

Это поддерживается по умолчанию в Swing, хотя вертикальная прокрутка имеет приоритет над горизонтальной прокруткой, когда видны обе полосы прокрутки.

Я ожидаю, что новая разработка будет сделана в Swing, а не в AWT.

Edit:

Вы можете использовать контроллер колесика мыши , чтобы настроить скорость прокрутки. Я никогда не пробовал на горизонтальной прокрутке, дайте мне знать, если это работает.

...