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

时间:2010-05-16 10:18:01

标签: java awt mousewheel scrollpane

与许多现代鼠标和触控板一样,我的笔记本电脑支持垂直和水平滚动。一旦你习惯它,这是一个令人上瘾的功能。我只是希望我的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 个答案:

答案 0 :(得分:1)

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

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

编辑:

您应该可以使用Mouse Wheel Controller自定义滚动速度。我从来没有在水平滚动上试过它,让我知道它是否有效。

答案 1 :(得分:1)

我的MacBookPro触控板上的导航事件是开箱即用的。请注意JScrollPane上有一种启用滚轮事件的方法:setWheelScrollingEnabled