2016-03-25 23 views
0

Eclipse RCP'ye yeni katılıyorum ve bir uygulama üzerinde çalışıyorum (Eclipse 4), farklı kaynaklardan veri görüntülemek için birden fazla bölüm var. Kullanıcının istediği veri kaynaklarını dinamik olarak seçme olanağı sunan bir Diyalog görüntüleyen bir menü eklemek istiyorum. Seçenekler seçildiğinde, Partinin sınıfını seçenekler olarak parametrelerle yeniden oluşturmak ve görünümü yenilemek istiyorum. Mümkün mü ?Bölüm İşleyicisinden Menü İşleyici Nasıl Yeniden Oluşturulur?

Benim Bölümünün createComposite yöntemi:

@PostConstruct 
    public void createComposite(Composite parent) { 
     Composite composite = new Composite(parent, SWT.EMBEDDED); 
     parent_C = parent; 
     Frame frame_1 = SWT_AWT.new_Frame(composite); 
     JPanel mainPanel = new JPanel(); 
     BorderLayout layout = new BorderLayout(); 
     mainPanel.setLayout(layout); 

      /* Layout Definition */ 
    } 

Ben createComposite Yöntem başka bir parametre eklemek istediğiniz seçenekleri gösterir:

@PostConstruct 
    public void createComposite(Composite parent, String[] options) { 
    /*Code Here*/ 
} 

dize dizinin Değer kullanıcı validate değiştirir Menüden seçenekler. Kullanıcılar seçeneklerini doğruladığında, bölümün sınıfı yeni seçeneklerle çağrılmalıdır.

Bunu yapmanın bir yolu var mı? Teşekkürler

cevap

1

Bunu yapmak için, oluşturduğunuz parçanın değerlerini IEclipseContext'dan edinmeniz gerekir. Bunu yapmanın bir yolu, UIEvents.Context.TOPIC_CONTEXT etkinliğine abone olmak ve bu olaydaki yeni bölümün içeriğini değiştirmek. Eğer @Named kullanmak diye

@Inject 
IEventBroker eventBroker; 


eventBroker.subscribe(UIEvents.Context.TOPIC_CONTEXT, this::handleContextEvent); 


private void handleContextEvent(Event event) 
{ 
    Object origin = event.getProperty(UIEvents.EventTags.ELEMENT); 
    if (!(origin instanceof MPart)) 
    return; 

    MPart part = (MPart)origin; 

    // TODO check this is the MPart you want 

    Object context = event.getProperty(UIEvents.EventTags.NEW_VALUE); 
    if (!(context instanceof IEclipseContext)) 
    return; 

    IEclipseContext newContext = (IEclipseContext)context; 

    newContext.set("nameForOptions", .... options ....); 
} 

Burada seçenekler için bir ad kullanmış:

@PostConstruct 
public void createComposite(Composite parent, @Named("nameForOptions") String[] options) 
+0

Yanıtınız için teşekkür ederiz, her kısma bir Bağlam işleyicisi olayı eklemem gerekiyor ve soru, bir Menü Öğesi işleyicisinden parçanın sınıfını nasıl arayacağımız sorusudur. Benim bölümün sınıfının başka bir sınıftan genişletilmediğini bilerek nasıl başlayacağınız, bölüm Application.e4xmi dosyasındaki sihirbazdan oluşturuldu ve bir sınıf URI –

+0

Hayır olarak bir Java sınıfıyla ilişkilendirildi, yalnızca bir bağlam işleyicisi kullanıyorsunuz tüm RCP için. Bunu, parçalarınızı oluşturmak için ne kullanıyor olursanız olun. –

+0

Parçaları Application.e4xmi dosyasından oluşturdum. Bir menü öğesine tıklandığında içeriğin nasıl değiştirileceği ve parçanın içeriğinin nasıl yenileneceği net değil –

0

yerine tekrar tüm parçayı yeniden yaratma bunun yenilemek için daha kolay olacaktır, yeniden yaratmak parçanın içindeki içerik. Bu, ya parçanın içeriğinin bertaraf edilmesiyle ve içeriğin tekrar bu konteynerin altına ya da herhangi bir masa/masa görüntüleyicinin yenileme mekanizmasıyla yeniden oluşturulmasıyla mümkün olmalıdır.

İlgili konular