【问题标题】:How to use my trackpad for horizontal mousewheel scrolling in a Java AWT ScrollPane如何在 Java AWT ScrollPane 中使用我的触控板进行水平鼠标滚轮滚动
【发布时间】:2010-05-16 10:18:00
【问题描述】:

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

【问题讨论】:

    标签: java awt mousewheel scrollpane


    【解决方案1】:

    这在 Swing 中默认支持,尽管当两个滚动条都可见时,垂直滚动优先于水平滚动。

    我希望在 Swing 而不是 AWT 中进行新的开发。

    编辑:

    您应该可以使用Mouse Wheel Controller 自定义滚动速度。我从来没有在水平滚动上尝试过,如果它有效,请告诉我。

    【讨论】:

    • 谢谢,Swing 工作,虽然比 AWT 慢,但这可能只是轮子的默认配置。我真的很想将 AWT 用于操作系统控件,但我现在将切换到 swing,反正我的大部分 UI 都会被我覆盖。
    • 关于慢速滚动的评论,见我上面的编辑。
    • 感谢您的更新。我尝试了那个鼠标滚轮控制器类,但它使我的硬件上的滚动变得迟缓和生涩。我的最终解决方案是在 ScrollBars 本身上使用 setUnitIncrement() 方法,我已将详细信息添加到上面的代码中。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-21
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多