Eclipse插件开发:DefaultInformationControl是否按预期工作

时间:2016-06-01 09:27:31

标签: eclipse eclipse-plugin hover eclipse-jdt

我正在编写使用texthover的eclipse插件并将其覆盖为我自己的文本。 我需要在悬停窗口中添加一个动作,所以我使用了以下函数:

public IInformationControlCreator getHoverControlCreator() 

这是我的代码:

@Override
    public IInformationControlCreator getHoverControlCreator() {

    return new IInformationControlCreator() {
        public IInformationControl createInformationControl(Shell parent) {
            Shell s=new Shell(parent,SWT.V_SCROLL | SWT.H_SCROLL);
            ToolBarManager tbm = new ToolBarManager(SWT.FLAT);
            NoFocusDic dic = new NoFocusDic(parent, tbm);
            dic.setBackgroundColor(new Color(null,123,234,12));
            ButtonAction ba=new ButtonAction();
            tbm.add(ba);
            tbm.update(true);
            dic.setSize(300,100);
            dic.setLocation(new Point(500,500));
        //  dic.setInformation("abc");
            dic.setVisible(true);
            return dic;

        }
    };
}

当我使用setInformation行运行此代码时,我得到了这个窗口:

the window I get with the setInformation line

当我在没有setInformation行的情况下运行它时,我得到了这个窗口:

the window I get without the setInformation line

所以我想要的窗口是第二个,但里面有文本。 我在eclipse网站上看到,如果我试图抓住焦点,setVisible将无法工作,但我不认为setInformation正在引起关注。

任何想法该怎么做?

package TextHoverPackage;

import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IInformationControlExtension2;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Shell;

public class NoFocusDic extends DefaultInformationControl implements IInformationControlExtension2 {

    public NoFocusDic(Shell parent, ToolBarManager toolBarManager) {
        super(parent, toolBarManager);
    }

    public NoFocusDic(Shell parent, ToolBarManager toolBarManager, IInformationPresenter a){
        super(parent, toolBarManager,a);
    }

    @Override
    public void setInput(Object arg0) {
        super.setInformation(arg0.toString());
    }
}

1 个答案:

答案 0 :(得分:0)

DefaultInformationControl.setInformation调整窗口大小以修复您提供的文本。但是,只有在定义了IInformationPresenter时才会这样做。

所以一个选项是在构造函数中为null指定IInformationPresenter

public NoFocusDic(Shell parent, ToolBarManager toolBarManager) {
    super(parent, toolBarManager, null);
}