2016-06-01 2 views
0

Я пишу плагин eclipse, который использует texthover и переопределяет его для моего собственного текста. мне нужно добавить действие к окну парения, так что я использовал следующую функцию:Eclipse Plug-in Development: DefaultInformationControl Does'nt работает должным образом

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

И когда я запускаю его без setIn формирование линии я получаю это окно:

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()); 
    } 
} 
+0

Что такое 'NoFocusDic'? –

+0

@ greg-449 просто класс, который простирается от DefaultInformationControl и реализует IInformationControlExtension2, чтобы сделать окно таким, какое оно есть на рисунке № 2. PS просто добавьте этот код класса в quastion –

ответ

0

DefaultInformationControl.setInformation регулирует размер окна, чтобы исправить текст, который вы даете ему. Однако это делается только в том случае, если был определен IInformationPresenter.

Так один вариант указать null для IInformationPresenter в конструкторе:

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

Я уже пробовал, и первая фотография - результат из этого –

+0

Это не то, что вы сказали, что сделали. Я говорю о вызове setInformation, но с нулевым информатором. Используемый конструктор использует HTMLInformationPresenter. –

+0

Я редактирую свой конструктор и заменяю свою строку вашей линией и не изменяю. Моя реальная проблема заключается в том, что первая картина возвращается к нормальному зависанию, ища после перемещения мыши на нее (желтый цвет и без моего действия). Постскриптум Вы знаете, как я могу найти исходный код DefaultInformationControl? –

Смежные вопросы