【问题标题】:SWT StyledText - listen to clientArea changeSWT StyledText - 监听 clientArea 变化
【发布时间】:2013-11-14 07:34:04
【问题描述】:

我遇到了 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 的一部分是可见的,并且用户键入了一些文本,这会导致可见客户区发生变化,那么侦听器不会收到有关更改的通知。

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

【问题讨论】:

    标签: java swt eclipse-rcp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我对可见内容的移动感兴趣。如果用户例如不键入可打印字符,而是按箭头,则您的方法将不起作用 - 因此,如果插入符号移动到样式文本的不可见部分。但我很高兴听到其他想法:)
      • 顺便说一句,我知道我可以听到插入符号位置的变化,但我想听滚动条位置的变化。
      猜你喜欢
      • 2012-08-29
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多