Imagemodule

Alles was NetBeans erweitert

Moderator: wegus

bukama
Beiträge: 3
Registriert: 03.09.2012, 15:43

Imagemodule

Beitragvon bukama » 23.11.2012, 12:56

Hallo,
ich fange gerade damit an mein erstes NetBeansprojekt zu bauen und werde in diesem später in verschiedenen Modulen Grafiken einbinden, z.B. Icons. Damit ich nun nicht immer jedes Modul anpacken muss wenn sich eine Grafik ändert möchte ich gerne soetwas wie ein Imagemodule bauen. Also ein Modul, dass ich in meine anderen Module einhänge um so dort ebenfalls auf die Grafiken zugreifen zu können. Es also als eine Art Libary in den anderen Modulen verwenden.

Vlt stell ich mich gerade als Anfänger auch blöd an, aber irgendwie kriege ich das nicht hin. Ich habe mir ein neues Modul erzeugt, dort in einem Sourcepacke die Grafiken eingebunden soweit so gut.

Wie mache ich daraus jetzt eine Libary für die anderen Module? :(

padde
Beiträge: 96
Registriert: 16.03.2010, 09:21

Re: Imagemodule

Beitragvon padde » 27.11.2012, 13:54

Hast du dir denn schonmal Tutorials zur Netbeans Platform-Programmierung angeschaut? Dieses Tutorial zeigt finde ich ganz schön, wie man Module in anderen Modulen nutzen kann.

Letztendlich musst du in deinem Modul halt (eine) Klasse(n) bereitstellen, welche deine Bilder aus deinem Resource-Verzeichnis laden und als java.awt.Image oder ähnliches zurück geben. Und dann musst du halt anhand des im Tutorial gezeigten Vorgehen dieses Modul in anderen Modulen einbinden und die entsprechenden Funktionen aus deinen Klassen zugreifen.

Wo hapert es denn? Hast du schon etwas probiert?

bukama
Beiträge: 3
Registriert: 03.09.2012, 15:43

Re: Imagemodule

Beitragvon bukama » 05.12.2012, 16:06

Oh doch eine Antwort, hatte nach drei Tagen ohne Antwort keine Hoffnung mehr, dass hier noch was kommt :O

Ja das Tutorial kenne ich und ich arbeite sehr intensiv mit dem NetBeans Platform 7 Buch von Heiko Böck was das eigentlich sehr gut beschreibt und auch gute Beispiele dabei hat. Somit habe ich den grundsätzlichen Austausch mittels Lookup schon verstanden.

Ich war beim dem Grafikmodul wie folgt vorgegangen. Modul "Images" dort in einem Package die Grafiken eingebunden. Nun dieses Modul als Abhängigkeit in das Modul meiner Windowkomponente angehangen. Somit konnte ich beim Designen der GUI auf die Bilder meines Grafikmoduls zugreifen. So weit so schön.

Das Problem ist aber, wenn man diese Anwendung dann ausführt schmiert NetBeans mit einer Exception, dass er die Windowkomponente nicht identifizieren kann ab. Nachdem ich erstmal an Hand der Fehlermeldung recherchiert und auch was im Bugtracker von NetBeans gefunden hatte konnte ich sichergehen, dass die Ursache der Bugtrackereinträge die diese Fehlermeldung produzieren nicht sein konnte (modifizieren von TopComponentattributen). Nach weiterer manueller Suche und Testen bin ich dann irgendwann darauf gekommen, dass die Abhängigkeiten des Imagemodules dafür verantwortlich ist. Wenn ich die Grafiken ins gleiche Modul kopiere wie die TopComponent funktioniert alles wunderbar, sobald die Abhängigkeit da ist kann man das Fenster in der Anwendung nicht mehr öffnen.

Deine Idee eine Bilderklasse zu generieren klingt auf den ersten Blick ganz nett, aber ich muss ja z.B. das Icon einer TopComonent im Quellcode definieren. Wobei ich mir aus dem Kopf nicht sicher bin ob man das auch während der Laufzeit ändern kann. Falls das gehen sollte wäre deine Idee sehr gut und ich werde mir dann auf jeden Fall die Arbeit machen und das ausprobieren. Danke schonmal

ebaumann
Beiträge: 284
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Imagemodule

Beitragvon ebaumann » 06.12.2012, 09:20

Es ist keine Pflicht, bei TopComponents Icons zu setzen. Man kann es, falls man dies möchte, über TopComponent.setIcon(), was ein Image-Objekt voraussetzt. Falls eine Exception aufgrund des Icons erfolgt, ist vermutlich dort die Ursache zu suchen: Das Laden schlägt vielleicht fehl (für genauere Aussagen wäre der Stack Trace der Exception erforderlich).

Als ich anfing mit der Platform, hatte ich auch erst den Gedanken von "zentralen Ressourcen" (Bundle-Strings, Icons etc.), davon habe ich nach einiger Zeit Abstand genommen, da es mehr Probleme verursacht als löst. Falls du trotzdem "zentrale" Icons möchtest oder zumindest "Modul-zentrale" (z.B. ein Package "icons" im Modul), kannst du das Laden Move-Rename-Refactoring-sicher gestalten durch folgenden Code - natürlich muss das Icon-Package public zur Verfügung gestellt werden:

Hilfsklasse:

Code: Alles auswählen

import org.openide.util.ImageUtilities;

public final class ImageUtil {

    public static Image loadImage(Class<?> classInSamePackageAsImage, String imageName) {
        if (classInSamePackageAsImage == null) {
            throw new NullPointerException("classInSamePackageAsImage == null");
        }
        if (imageName == null) {
            throw new NullPointerException("imageName == null");
        }
        String packagePath = classInSamePackageAsImage.getPackage().getName().replace('.', '/');
        return ImageUtilities.loadImage(packagePath + '/' + imageName);
    }
}


Benutzen der Hilfsklasse; im Package mit den Icons ist eine "leere Klasse", im Beispiel hat sie den Namen "Icons":

Code: Alles auswählen

public final class MyTopComponent extends TopComponent {

    public MyTopComponent() {
        setIcon(ImageUtil.loadImage(Icons.class, "MyIcon.png"));
    }
}


Zurück zu „NetBeans - Modules / Plugins“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast