我正在编写使用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行运行此代码时,我得到了这个窗口:
当我在没有setInformation行的情况下运行它时,我得到了这个窗口:
所以我想要的窗口是第二个,但里面有文本。 我在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());
}
}
答案 0 :(得分:0)
DefaultInformationControl.setInformation
调整窗口大小以修复您提供的文本。但是,只有在定义了IInformationPresenter
时才会这样做。
所以一个选项是在构造函数中为null
指定IInformationPresenter
:
public NoFocusDic(Shell parent, ToolBarManager toolBarManager) {
super(parent, toolBarManager, null);
}