topComponent mit Projekt verknüpfen

Alles zu NetBeans als RCP-Platform

Moderator: arittner

topComponent mit Projekt verknüpfen

Beitragvon toki78 » 09.03.2010, 15:46

Hallo,
mein Projekttyp erzeugt genau eine TopComponent.
Diese TopComponent ist keiner konkreten Datei zugeordnet.
Ich habe die TopComponent über den JPanel-Form erzeugt.
In meiner RCP-Anwendung habe ich ein Projekt von diesem Typ erzeugt,und
wenn man eine dem Projekttyp zugeordnete Aktion ausführt, wird die TopCompnent per TopComponent.open() angezeigt.
Wenn ich meine Anwendung nun schließe und wieder starte, wird diese TopComponent wieder angezeigt, aber ohne Inhalt.
Und wenn ich die dem Projekt zugeordnete Action wieder ausführe, wird eine neue TopCompnent erzeugt - welche dann auch
den richtigen Inhalt anzeigt.
Was kann ich tun, damit die geöffnete TopComponent auch nach einem Programmneustart dem Projekt zugeordnet bleibt ?
Soll ich das Projekt in den Lookup der TopComponent packen ?

Grüße
Toki
Benutzeravatar
toki78
 
Beiträge: 56
Registriert: 25.01.2010, 14:40
Wohnort: Reutlingen

Re: topComponent mit Projekt verknüpfen

Beitragvon stophi » 11.03.2010, 02:47

Das ist ein seltsamer Fehler. Eigentlich sollte für eine TopComponent auch nur eine Instanz existieren (
Siehe auch: http://de.wikipedia.org/wiki/Singleton_ ... smuster%29).

Wie erzeugst Du denn eine neue TopComponent in Deinem Code? Rufst Du da vielleicht irgendwo den Konstruktor auf? Dann wäre es nämlich kein Wunder, dass eine zweite Instanz erstellt wird. Stattdessen solltest Du die Instanz aufrufen, die NetBeans beim Starten der Anwendung schon erstellt hat.

Und warum erstellst Du die TopComponent über das JPanel-Form? Nimm doch den Wizard für TopComponent (File - New File - Module Development - Window Component). Da werden dann auch die entsprechenden Methoden generiert und Du kannst z.B. folgendes machen:

Code: Alles auswählen
MyTopComponent.findInstance().open();


Und so sollte man es NICHT machen:

Code: Alles auswählen
TopComponent tc = new MyTopComponent();
tc.open();


Hoffe, das hilft weiter. ;-)
Benutzeravatar
stophi
 
Beiträge: 135
Registriert: 02.03.2007, 09:32
Wohnort: München

Re: topComponent mit Projekt verknüpfen

Beitragvon toki78 » 11.03.2010, 11:16

Aber was ist, wenn man eine Text-Editor-TopComponent verwendet ?
Dann muss man doch diese TopComponent für jede Textdatei separat öffnen.
Aber ok für mein Projekt tut es das Singleton-Pattern.
Danke für den Tip !

Toki
Benutzeravatar
toki78
 
Beiträge: 56
Registriert: 25.01.2010, 14:40
Wohnort: Reutlingen

Re: topComponent mit Projekt verknüpfen

Beitragvon arittner » 11.03.2010, 13:00

Moin!

TextEditor-TCs sollten kein Singleton sein. Außerdem sollten die PERSISTENCE_NEVER zurückgeben. Das Laden der zu letzt geöffneten Dateien muss extra implementiert werden.

Beste Grüße,
Josch
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: topComponent mit Projekt verknüpfen

Beitragvon toki78 » 11.03.2010, 13:18

OK Danke, dann gebe ich PERSISTENCE_NEVER zurück.
Nun nochwas : wie stelle ich fest, wann mein Projekt geöffnet ist ?
Weil in den Handler/Callback würde ich dann TopComponent.open aufrufen.
Ich dachte erst, ich mache das in ProjectFactor.loadProject(), aber die Methode wird ja bereits vom File-Requester aufgerufen,
also noch bevor das Projekt in der IDE angezeigt wird.
Wie stelle ich nun fest, daß ein Projekt in der IDE angezeigt wird und nicht nur im FileRequester ?

Beste Grüße
Toki
Benutzeravatar
toki78
 
Beiträge: 56
Registriert: 25.01.2010, 14:40
Wohnort: Reutlingen

Re: topComponent mit Projekt verknüpfen

Beitragvon arittner » 11.03.2010, 13:32

Moin!

Ich habe in meinem Projekt auf kenai.com eine Lösung:

http://kenai.com/projects/nbcronjob/

Lade Dir mal den Sourcecode runter und such mal nach ProjectOpenChangeListener.java und seine Verwendung.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: topComponent mit Projekt verknüpfen

Beitragvon toki78 » 11.03.2010, 14:32

Klasse, damit funktioniert's !
Noch ne Frage :
du schreibst : if(mypropertyhandler == null) openprojects.addProprtyChangeListener(mypropertyhandler = new MyPropertyHandler)..........
ich habe da if weggelassen und mache es so : openprojects.addProprtyChangeListener(new MyPropertyHandler.............
geht das auch ? Oder wird restored() mehrmals aufgerufen ?

Dank und Grüße
Toki
Benutzeravatar
toki78
 
Beiträge: 56
Registriert: 25.01.2010, 14:40
Wohnort: Reutlingen

Re: topComponent mit Projekt verknüpfen

Beitragvon arittner » 11.03.2010, 18:11

Moin!

toki78 hat geschrieben:Klasse, damit funktioniert's !


Super, ich habe lange danach suchen müssen, bis es gut funktionierte. Es gibt nämlich scheinbar mehrere Möglichkeiten (wobei das m.E. die Beste ist).

Noch ne Frage :
du schreibst : if(mypropertyhandler == null) openprojects.addProprtyChangeListener(mypropertyhandler = new MyPropertyHandler)..........
ich habe da if weggelassen und mache es so : openprojects.addProprtyChangeListener(new MyPropertyHandler.............
geht das auch ? Oder wird restored() mehrmals aufgerufen ?


Die letzten Änderungen sind ein paar Monate alt, aber IMHO war das meine Befürchtung. Da ich aber noch den AntLogger für Projekte hinzufügen wollte, schaue ich mir das noch mal an.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: topComponent mit Projekt verknüpfen

Beitragvon arittner » 11.03.2010, 19:58

Moin!

Hier noch eine gute FAQ zu Non-Singleton-TCs: http://wiki.netbeans.org/DevFaqNonSingl ... Components

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: topComponent mit Projekt verknüpfen

Beitragvon arittner » 15.03.2010, 12:59

Moin!

Und hier eine FAQ, die TopComponents als Editoren einsetzt:

http://wiki.netbeans.org/DevFaqEditorTopComponent

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen


Zurück zu NetBeans - Platform / RCP

Wer ist online?

Mitglieder in diesem Forum: padde und 2 Gäste