Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将带有控件的工具栏添加到DefaultInformationControl?_Java_Eclipse_Eclipse Plugin_Hover_Swt - Fatal编程技术网

Java 如何将带有控件的工具栏添加到DefaultInformationControl?

Java 如何将带有控件的工具栏添加到DefaultInformationControl?,java,eclipse,eclipse-plugin,hover,swt,Java,Eclipse,Eclipse Plugin,Hover,Swt,到目前为止,我所做的是为我创建的工具栏添加一个ToolBarManager,其中包含我要添加的ToolItem,但当基于此DefaultInformationControl的悬停弹出窗口打开时,不会显示任何内容。 我给了所有工具项文本和样式 我的代码是: public类JavaTextHover实现IJavaEditorTextHover、itexthover扩展{ . . . @凌驾 公共信息控制创建者getHoverControlCreator(){ 返回新的IIInformationCon

到目前为止,我所做的是为我创建的工具栏添加一个ToolBarManager,其中包含我要添加的ToolItem,但当基于此DefaultInformationControl的悬停弹出窗口打开时,不会显示任何内容。 我给了所有工具项文本和样式

我的代码是:

public类JavaTextHover实现IJavaEditorTextHover、itexthover扩展{
.
.
.
@凌驾
公共信息控制创建者getHoverControlCreator(){
返回新的IIInformationControlCreator(){
公共信息控件createInformationControl(外壳父级){
工具栏=新工具栏(父级,SWT.NONE);
ToolItemPush=新的ToolItem(工具栏,SWT.PUSH);
itemPush.setText(“推送项”);
ToolItemCheck=新的ToolItem(工具栏,SWT.CHECK);
itemCheck.setText(“检查项”);
ToolItemRadio1=新的ToolItem(工具栏,SWT.RADIO);
itemRadio1.setText(“无线电项目1”);
ToolItemRadio2=新的ToolItem(工具栏,SWT.RADIO);
条目Radio2.setText(“条目2”);
ToolItemSeparator=新的ToolItem(工具栏,SWT.SEPARATOR);
文本文本=新文本(工具栏,SWT.BORDER | SWT.SINGLE);
text.pack();
itemSeparator.setWidth(text.getBounds().width);
itemSeparator.setControl(文本);
最终的ToolItem下拉菜单=新的ToolItem(工具栏,SWT.DROP\u下拉菜单);
setText(“下拉项”);
setToolTipText(“单击此处查看下拉菜单…”);
最终菜单=新菜单(父菜单、SWT.弹出菜单);
新菜单项(菜单,SWT.PUSH).setText(“菜单项1”);
新菜单项(菜单,SWT.PUSH).setText(“菜单项2”);
新菜单项(菜单,SWT.分隔符);
新菜单项(菜单,SWT.PUSH).setText(“菜单项3”);
addListener(SWT.Selection,newlistener()){
公共无效handleEvent(事件){
if(event.detail==SWT.ARROW){
矩形边界=itemDropDown.getBounds();
Point Point=toolBar.toDisplay(bounds.x,bounds.y+bounds.height);
菜单.设置位置(点);
menu.setVisible(true);
}
}
});
Listener selectionListener=new Listener(){
公共无效handleEvent(事件){
ToolItem=(ToolItem)event.widget;
System.out.println(选中item.getText()+);
if((item.getStyle()&SWT.RADIO)!=0 | |(item.getStyle()&SWT.CHECK)!=0)
System.out.println(“选择状态:+item.getSelection());
}
};
itemPush.addListener(SWT.Selection,selectionListener);
itemCheck.addListener(SWT.Selection,selectionListener);
itemRadio1.addListener(SWT.Selection,selectionListener);
itemRadio2.addListener(SWT.Selection,selectionListener);
addListener(SWT.Selection,selectionListener);
toolBar.pack();
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,false));
ToolBarManager tbm=新的ToolBarManager(工具栏);
System.out.println(tbm.getControl().getChildren().length);
DefaultInformationControl dic=新的DefaultInformationControl(母公司,tbm);
dic.setBackgroundColor(新颜色(空,98201145));
返回dic;
}
};
}
.
.
.
}

我在Eclipse核心代码中看到的唯一一个使用工具栏的示例是这样做的:

private static final class PresenterControlCreator extends AbstractReusableInformationControlCreator {

    @Override
    public IInformationControl doCreateInformationControl(Shell parent) {
        ToolBarManager tbm= new ToolBarManager(SWT.FLAT);
        NLSHoverControl iControl= new NLSHoverControl(parent, tbm);
        OpenPropertiesFileAction openPropertiesFileAction= new OpenPropertiesFileAction(iControl);
        tbm.add(openPropertiesFileAction);
        tbm.update(true);
        return iControl;
    }
}
NLSHOWRCONTROL
扩展了
DefaultInformationControl

因此,它是在创建DefaultInformationControl并使用操作而不是工具项之后添加到工具栏的

static class NLSHoverControl extends DefaultInformationControl implements IInformationControlExtension2 {

    /**
     * The NLS control input.
     */
    private NLSHoverControlInput fInput;

    /**
     * Creates a resizable NLS hover control with the given shell as parent.
     * 
     * @param parent the parent shell
     * @param tbm the toolbar manager or <code>null</code> if toolbar is not desired
     */
    public NLSHoverControl(Shell parent, ToolBarManager tbm) {
        super(parent, tbm);

    }

    /**
     * Creates an NLS hover control with the given shell as parent.
     * 
     * @param parent the parent shell
     * @param tooltipAffordanceString the text to be used in the status field or
     *            <code>null</code> to hide the status field
     */
    public NLSHoverControl(Shell parent, String tooltipAffordanceString) {
        super(parent, tooltipAffordanceString);
    }

    /**
     * {@inheritDoc} This control can handle {@link NLSStringHover.NLSHoverControlInput}.
     */
    public void setInput(Object input) {
        Assert.isLegal(input instanceof NLSHoverControlInput);

        NLSHoverControlInput info= (NLSHoverControlInput)input;
        setInformation(info.fInformation);
        fInput= info;
    }

    /**
     * Returns the control input.
     * 
     * @return the control input
     */
    public NLSHoverControlInput getInput() {
        return fInput;
    }
}

向我们展示你的代码。只需将其添加到主帖子中,我找不到任何关于NLShupControl的信息。你能提供一个链接或什么吗,或者你可能对NLSStringHover感到困惑?不,它是
org.eclipse.jdt.internal.ui.text.java.hover.NLSStringHover
中声明的一个内部类。我如何使用/访问它或将它导入到我的项目中?或者我应该用你发给我的代码创建一个类?你不能使用它。因此,要么创建自己的副本,要么使用DefaultInformationControl,因为它看起来不会改变工具栏。