RCP XWT Steuerelemente finden

lam_tr

Top Contributor
Hallo zusammen,

ich hab folgendes Problem, habe A und B XWT-Composites und wenn ich im A Composite von den Button klicke will ich im B-Composite das Label-Text verändern, wie kann ich es realisieren?

Über XWT.findElementByName(Object data, String name);
kann ich nur innerhalb eines Composites auf steuerelemente zugreifen, wie geht es übergreifend?

Vielen Dank im voraus!

Gruss lam
 

craesh

Mitglied
Hallo lam!

Das stimmt, an deine Callback-Methode wird erst mal nur das Widget selber (in dem Fall dein Button) übergeben. Aber jeder Control (somit jeder Button) verrät dir über getShell() sein Fenster, das reicht XWT um nach jedem anderen Widget in diesem Fenster zu suchen.

Grüße
craesh
 

lam_tr

Top Contributor
Hi craesh und wie genau kann ich nach anderen Steuerelementen suchen, wenn ich Controls zwischen zwei VIewParts habe.
Wenn ich von der Shell aus nach den Elementen suche, funktioniert es soweit schon, leider bekomme ich Objekte von Typen Control. Runtercasten geht nicht, gibts da spezielle Klassen womit ich nach Steuerelemente suchen kann?

Gruss lam
 

craesh

Mitglied
Hi lam,

du kriegst doch nach jedem XWT.load() eine Referenz zu deiner Shell zurück (oder Composite... was auch immer dein root-Element ist). Diese kannst du natürlich in ne Map hauen, in statischen Feldern abspeichern, wie immer du willst. Der Rest ist klassisches Java-Handwerk. Dadurch hast du also von deiner ganzen Applikation aus Zugriff auf jedes Control, das du über XWT definiert hast.

Grüße
craesh
 

lam_tr

Top Contributor
Hi craesh,

ich kapier das irgendwie nicht.

Wenn ich die XWT in meiner RCP ViewA lade mit XWT.load(url, options) dann bekomme ich einen Control(=CompositeA) zurück.
Und über ViewB will ich auf den TableViewer von CompositeA zugreifen, wie implementiere ich es.

Mit XWT.load(url, options) bekomme ich zwar ein Control den ich in die Map packen kann, aber der TableViewer bekomme ich nicht wirklich oder?

Und mit welcher Methode kann ich diesen Prozess durchführen "das reicht XWT um nach jedem anderen Widget in diesem Fenster zu suchen."?

Gruss lam
 

craesh

Mitglied
Hi lam,

ich muss gestehen, dass ich mich mit RCP nicht auskenne, deswegen kann ich dir keine konkrete Implementation nennen. Ich habe nur mit XWT rumgespielt und habe in meiner Applikation ein ähnliches Problem wie deines lösen können.

Das ganze reduziert sich jedenfalls auf folgendes - unabhängig vom Framework oder sonstigem Drumherum: Objekt A will auf etwas von Objekt B zugreifen. Also gib Objekt A eine Referenz auf Objekt B, damit es auf seine Member zugreifen kann. Dass kannst du beispielsweise über einen Konstruktor oder über eine Setter-Methode tun. Es gibt auch andere Möglichkeiten, beispielsweise indem du ein übergeordnetes Objekt hast, das A bekannt ist und über B Auskunft erteilen kann.

Sobald A nun das Composite von B hat, kann A jedes weitere Control in B finden.

Grüße
craesh
 

lam_tr

Top Contributor
Hi craesh,

Danke es hat so funktioniert.
Aber ein neues Problem ist aufgetaucht :)

Wenn ich ein XWT Composite und darunter eine Group erstelle und unter der Group ein weiteres Composite erstelle dann bekomme ich einen StackOverFlow Exception, das ist doch nicht normal oder?
 

craesh

Mitglied
Eine StackOverflowException deutet meistens auf eine Endlosschleife hin.

Allerdings würde ich dich bitten, gewisse "Formalien" dir zuliebe und zuliebe anderer Benutzer hier einzuhalten :)

  1. Genaue Problembeschreibung inkl. Code und Stacktrace. So kann ich (und auch andere) nur raten.
  2. Eigenes Thema, da dieses Problem gar nichts mehr mit "XWT Steuerelement finden" zu tun hat. Du tust damit späteren Besuchern einen Gefallen, die ebenfalls nach einer StackOverflowException suchen aber nie auf die Idee kommen würden, in diesem Thread nach einer Lösung zu suchen. Abgesehen davon: Im Moment schaue wohl möglich nur ich in diesen Thread, kaum jemand kriegt mit, dass du eine neue Frage hast.
 

Ähnliche Java Themen

Neue Themen


Oben