我有一个非常大的数据视图。我想要一个用户的滚动条,但我想要覆盖滚动条按下向上和向下箭头(或键盘上的上下键)处理的标准方式,以及单击进行翻页的轨道区域和向下翻页。这是因为数据流式传输到视图中,JScrollBar的“min / max / value”模型不适用于此。
处理这些鼠标或键事件的标准方法是滚动条的值通过“单位增量”(较小的值)或“块增量”(较大的值)进行调整。 我不希望滚动条在点击时更改其值;我只想收到一个事件,说“用户请求按块向上滚动”或“用户请求向下滚动一个单元”。有谁知道这样做的方法?
顺便说一句,似乎BasicScrollBarUI$TrackListener.mousePressed(MouseEvent)
处理了点击,它总是调用scrollbar.setValue(newValue)
。所以我可能运气不好:(
也许有一种方法可以使用SWT滚动条进行操作?
答案 0 :(得分:1)
Swing组件使用Actions来处理KeyStrokes和许多鼠标事件。查看Key Bindings以获取滚动条支持的操作列表。
您应该可以使用自己的自定义操作替换这些操作。
答案 1 :(得分:1)
我想出了怎么做。我为滚动条指定了一个扩展默认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));
}
}