SWT StyledText - 收听clientArea更改

时间:2013-11-03 16:02:33

标签: java swt eclipse-rcp

我遇到了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可见,而用户在某些文本中键入,这会导致可见客户区域发生变化,则不会通知听众有关更改的信息。

我的问题是 - 是否有可能以某种方式收听样式文本的可见客户区域的更改?

2 个答案:

答案 0 :(得分:4)

JFace TextViewer(使用StyledText)支持IViewportListener,可以满足您的需求。

如果您不想使用JFace,则可以复制TextViewer调用其侦听器的方式。它会监听控件调整大小,按键释放,按下按键,鼠标按下以及选中的小部件。然后检查StyledText.getTopPixel()是否已更改。

答案 1 :(得分:1)

您正在将侦听器专门添加到getHorizo​​ntalBar()返回的对象,这就是用户输入文本时没有发生任何事情的原因。尝试添加一个侦听器到getContent()。有点像:

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