2016-08-23 4 views
1

Мы построили графический интерфейс с Eclipse E4. Теперь нам нужно подключиться к GUI из класса non GUi. Как мы можем подключиться к ярлыку в Tool Control или как мы можем подключиться ко всем компонентам GUI в Eclipse E4?Получить компоненты GUI Eclipse E4

Мы уже посмотрели на @inject, но безуспешно.

графический интерфейс нашего приложения выглядит следующим образом: enter image description here

+0

Извините, но я дон Не понимаю, что вы просите. Дайте нам пример того, что вы пытаетесь сделать. –

+0

У нас есть метка, размещенная на панели состояния (в одном из инструментов управления инструментом). Куколка метки должна визуально отображать состояние соединения (подключено, отключено). Нам нужно изменить эту метку из обычного класса контроллера. – JimmyD

ответ

2

Один из способов сделать это, чтобы использовать объект менеджера, который предоставляет методы для установки значения элемента управления. Вы помещаете объект-менеджер в контекст Eclipse, чтобы его можно было вводить в любой класс (при условии, что класс создается системой впрыска).

Вы можете создать класс менеджера в контексте Eclipse, несколько способов, один только, чтобы объявить:

@Creatable 
@Singleton 
public class MyMananger 

, который заставит систему впрыска, чтобы создать один экземпляр класса, используемый везде он вводится. Вы также можете использовать службу OSGi, ContextFunction или напрямую установить объект в IEclipseContext (возможно, в классе LifeCycle).

Ваш код управления инструментом может ввести менеджера и сообщить ему об элементе управления, который он должен обновить.

Другой код, желающий обновить элемент управления, может ввести менеджер и вызвать методы для установки значения элемента управления.

Как я уже упоминал, только код, созданный системой впрыска, может использовать @Inject. Если вы создаете класс, используя new, вы не используете систему впрыска. Вместо этого используйте метод ContextInjectionFactory.make.

Вот очень простой «строка состояния» код заимствована из кода я использую:

Руководитель:

@Creatable 
@Singleton 
public final class StatusLineManager 
{ 
    /** Label control to show the status */ 
    private Label _label; 

    public StatusLineManager() 
    { 
    } 

    void setLabel(Label label) 
    { 
    _label = label; 
    } 

    public void setText(String text) 
    { 
    if (_label != null && !_label.isDisposed()) 
     _label.setText(text); 
    } 
} 

Строка состояния управления Инструмент:

public class StatusLineControl 
{ 
    public StatusLineControl() 
    { 
    } 

    @PostConstruct 
    public void postConstruct(Composite parent, StatusLineManager manager) 
    { 
    Composite body = new Composite(parent, SWT.NONE); 

    body.setLayout(GridLayoutFactory.fillDefaults().extendedMargins(10, 0, 4, 0).create()); 

    Label label = new Label(body, SWT.NONE); 

    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true)); 

    // Tell the manager about the label 

    manager.setLabel(label); 
    } 
} 
+0

Хорошо, это помогло мне немного дальше. Теперь есть какая-либо аннотация, которая может быть использована, если данные менеджера изменены. Чтобы графический интерфейс всегда обновлялся до самых новых значений в менеджере? – JimmyD

+0

Как я уже сказал, самое простое из того, что код управления инструментом сообщает менеджеру о контроле, который должен быть обновлен, чтобы менеджер мог просто установить элемент управления. В качестве альтернативы используйте традиционные прослушиватели или используйте события «IEventBroker». –

+0

Добавлен простой пример ответа –