【问题标题】:SWT MouseWheelListenerSWT MouseWheelListener
【发布时间】:2011-12-14 11:20:59
【问题描述】:

我已经对此进行了一段时间的研究,但在 SWT MouseWheelListeners 上发现的信息很少。看看你们中是否有人遇到过这种情况,或者有一个可以帮助解释它们的链接。

我正在尝试查找有关 SWT MouseWheelListener 的信息以及如何正确使用它。我正在尝试使用MouseWheelListener 在复合材料上创建缩放效果,在其上绘制多个复合对象。

本质上,当通过以两倍正常大小重新绘制画布、以比例布局重新绘制画布上的对象并将焦点移动到滚轮上的点来向上放大时。

我的问题如下: 是否可以在 Composite 上使用 MouseWheelListener 或者监听器仅适用于滚动复合材料之类的对象(我知道该方法存在;当我尝试在我的对象上滚动时(包括在调试时)什么也没有发生? 如果可能,如何在Composite 上启动MouseScrolledEvent? 如何区分上轮和下轮(e.count 向上为正,向下为负)?

代码如下:

public TagCloudComposite(Composite parent, int style) {
    super(parent, style);
    addMouseWheelListener(new MouseWheelListener() {
        public void mouseScrolled(MouseEvent e) {
            int count = e.count;
            System.out.println(count);
            // int direction = (Math.abs(count) > 0) ? UP : DOWN;
            // changeBackground(direction);
        }
    });
    this.setLayout(new FillLayout());
    this.setMinWeight(1);
    this.setMaxWeight(100);
    c = new Composite(this, SWT.NONE);
    this.setSize(300, 200);
}

【问题讨论】:

标签: java swt listener mouse mousewheel


【解决方案1】:

是的,你是对的。这里的“计数”表示滚动行数(Windows 中默认为 3 或 -3)

【讨论】:

  • 遗憾的是,SWT 文档描述了该字段的完全不同的用途(单击按钮的次数)并且根本没有记录这个。
【解决方案2】:

可以在画布上使用 MouseWheelListener;唯一的问题是该事件仅在具有焦点的组件上触发。

画布通常不会获得焦点,除非您向其添加关键侦听器(即使是空的)。

(我知道这个问题已经很老了,但是遇到了同样的问题,谷歌将我引导到那里,所以这里有一个解决方案)。

【讨论】:

  • 是的,我很早就发现了这一点。我相信我解决此问题的方法涉及使用 Composite 而不是画布并将侦听器附加到顶级画布和子复合材料。然后在滚动时采取适当的缩放动作来重绘内容。效率不高,但确实有效。
  • 谢谢。想知道如何添加keyListener的朋友,这里有一段代码sn-p:public class MouseWheelDemo extends Canvas { addKeyListener(mouseListener); class MapMouseListener implements KeyListener { @Override public void keyPressed(KeyEvent e) { // empty methods works } @Override public void keyReleased(KeyEvent e) { // empty methods works } }
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 2013-04-21
  • 1970-01-01
  • 2013-10-16
  • 2010-10-27
  • 2010-11-05
  • 2012-11-07
  • 1970-01-01
相关资源
最近更新 更多