1

我有一个非常大的数据视图。我想要一个用户的滚动条,但我想覆盖滚动条处理按向上和向下箭头(或键盘上的向上和向下键)的标准方式,以及单击向上和向上执行页面的轨道区域向下翻页。这是因为数据被流式传输到视图中,而 JScrollBar 的“最小值/最大值/值”模型对此不起作用。

处理这些鼠标或按键事件的标准方法是通过“单位增量”(较小的值)或“块增量”(较大的值)来调整滚动条的值。 我不希望滚动条在单击时更改其值;我只想收到一个事件,说“用户请求向上滚动一个块”或“用户请求向下滚动一个单元”。有谁知道这样做的方法?

顺便说一句,似乎BasicScrollBarUI$TrackListener.mousePressed(MouseEvent)处理点击,它总是调用scrollbar.setValue(newValue). 所以我可能不走运:(

也许有办法用 SWT 滚动条做到这一点?

4

2 回答 2

1

Swing 组件使用 Actions 来处理 KeyStroke 和许多鼠标事件。查看键绑定以获取滚动条支持的操作列表。

您应该能够用您自己的自定义操作替换这些操作。

于 2011-08-24T20:03:49.943 回答
1

我想出了怎么做。我为滚动条提供了一个自定义 UI,它扩展了默认的BasicScrollBarUI.,但覆盖了我需要的两个重要方法:scrollByBlock()scrollByUnit(). 事实证明setValue(),如果需要,我可以在这些方法中调用而不会弄乱事件。

class MyUI extends BasicScrollBarUI
{
    @Override
    protected void scrollByBlock(int direction)
    {
        System.out.println("scrollByBlock " + direction);
        // super.scrollByBlock(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 10));
    }

    @Override
    protected void scrollByUnit(int direction)
    {
        System.out.println("scrollByUnit " + direction);
        // super.scrollByUnit(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 3));
    }
}
于 2011-08-26T01:47:59.447 回答