2013-11-03 49 views
2

我遇到了SWT StyledText滚动条的问题。我已经添加了听众对我的样式文本的两个(水平和垂直)滚动条:SWT StyledText - 听客户端区域更改

styledText.getHorizontalBar().addListener (SWT.Selection, new Listener() { 
    public void handleEvent (Event e) { 
     //Some action 
    } 
}); 
styledText.getVerticalBar().addListener (SWT.Selection, new Listener() { 
    public void handleEvent (Event e) { 
     //Some action 
    } 
}); 

我的问题是,我已经增加听众,只有当用户使用鼠标移动滚动条反应。例如,如果只有部分styledText可见,并且用户在某些文本中键入可导致可见客户端区域发生变化的文本,则不会听取有关更改的信息。

我的问题是 - 是否有可能以某种方式聆听风格文本的可见客户区域的变化?

回答

1

您正在将侦听器专门添加到getHorizo​​ntalBar()返回的对象中,这就是为什么当用户输入文本时没有任何事情发生。尝试添加一个监听器到getContent()以及。沿着线的东西:

styledText.getContent().addTextChangeListener (new TextChangeListener() { 
      //events 
     }; 
+0

我对可见内容的移动感兴趣。例如,如果用户不键入可打印字符,而是按箭头 - 如果将脱字符移动到样式文本的不可见部分,则您的方法将不起作用。 但我很乐意听到其他想法:) – wojtek88

+0

顺便说一句,我知道我可以听取插入符的位置变化,但我想听滚动条的位置变化。 – wojtek88

4

JFace的TextViewer(使用StyledText)支持的IViewportListener这你想要做什么。

如果您不想使用JFace,那么您可以复制TextViewer如何调用其侦听器。它监听控件大小,按键释放,按下按键,向上滑动鼠标和选择小部件。然后它检查是否StyledText.getTopPixel()已更改。