如何在Java AWT ScrollPane中使用我的触控板进行水平鼠标滚轮滚动

bli*_*app 6 java awt scrollpane mousewheel

像许多现代鼠标和触控板一样,我的笔记本电脑支持垂直和水平滚动.一旦你习惯它,这是一个令人上瘾的功能.我只是希望我的Java应用程序通过触控板/鼠标滚轮支持水平滚动,但在我搜索它的任何地方似乎都不可能在Java中.

我真的希望有人告诉我,我在某种程度上做错了,这个功能已被请求行为:http://bugs.sun.com/bugdatabase/view_bug.do?video_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();

    }

}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 1

Swing 默认支持此功能,但当两个滚动条都可见时,垂直滚动优先于水平滚动。

我希望新的开发能够在 Swing 中完成,而不是在 AWT 中完成。

编辑:

您应该能够使用鼠标滚轮控制器来自定义滚动速度。我从未尝试过水平滚动,请告诉我它是否有效。