Eclipse Plug-in: Wie eine Grafik einfügen?

Mappenz

Bekanntes Mitglied
Hallo,

ich möchte gerne ein Plug-in entwickeln. Das soll am fürs Erste auch nichts besonderes sein: Es müssen nur Buttons über ein Bild gemapped werden. Beim klicken der Buttons wird ein webservice angesprochen, aber das ist erstmal nicht so wichtig.

Nach etwas Recherche würde ich in einem View ein Hintergrundbild benutzen und dann die Buttons einfach an die Richtigen stellen legen. Den SWT Code zu schreiben traue ich mir zu, ich weis aber nicht an welche stelle der Code kommen sollte. Außerdem bin ich mir nicht sicher ob ein View eine gute Wahl ist.

Bis jetzt habe ich ein View und eine Perspective erzeugt, hier klappt auch nicht alles wie ich mir das gedacht habe, aber das möchte ich zunächst ignorieren.

Grüße
Mappenz
 

Mappenz

Bekanntes Mitglied
Ich habe den größten Teil inzwischen geschafft. Aber zwei Probleme sind noch offen:

1. Ich möchte ein eigenes Hintergrundbild benutzen. Wenn ich versuche icon/sample.jpg zu referenzieren wird es nicht gefunden. Die auskommentierte Zeile zeigt wie ich es versucht habe.

2. Das Hintergrundbild wird gekachelt, ich möchte es aber gestreckt haben. (gelöst)

Hier ist mein Lösungsansatz soweit:

Java:
	@Override
	public void createPartControl(Composite parent) {
		
		FormData formData = new FormData();
		Button buttons[] = new Button[10];
		for(int i = 0; i < 10; i++) {
			buttons[i] = new Button(parent, SWT.PUSH);
			buttons[i].setText("Button " + i);
			buttons[i].setBounds(50, 50, 100, 100);
			buttons[i].setLayoutData(formData);
			
			formData = new FormData();
			formData.right = new FormAttachment(i*10);
			formData.bottom = new FormAttachment(i*10);
		}
//		parent.setBackgroundImage(new Image(parent.getDisplay(), "icons/sample.gif"));
		parent.setBackgroundImage(this.getDefaultImage());
		parent.setLayout(new FormLayout());
		Button button = new Button(parent, SWT.PUSH);
		button.setText("Button");
		button.setLayoutData(formData);
		
		for(Button b :buttons) {
			System.out.println(b + " " + b.getLayoutData());
		}
		parent.getShell().open();
	}

gruß
Michi
 
Zuletzt bearbeitet:
F

freak_007

Gast
Mit Activator.getImageDescriptor("Pfad zur Image").getImage() bekommst du ein Image.
Gruss,
Freak
 

Mappenz

Bekanntes Mitglied
Jupp, funktioniert, aber nicht ganz:

Java:
Image originalImg  = Activator.getImageDescriptor("icons/sample.gif").createImage();
und auch nur mit dem sample.gif. Versuche ich auf diese weise das Bild zu benutzen bekomme ich eine Nullpointerexception.
 
Zuletzt bearbeitet:

Sonecc

Gesperrter Benutzer
Im ersten Posting steht "icon/sample.gif" und im 2. "icons/sample.gif"
Eventuell nur ein Tippfehler in den Posts, aber das würde ich mal prüfen.
Ansonsten, wäre eine Erklärung ganz nett.
Wann genau tritt die NPE auf und wo und mit welchen Daten. Sicher, dass das Bild existiert?
 

Mappenz

Bekanntes Mitglied
Ich hatte tatsächlich den Pfad falsch angegeben. Jetzt funktioniert das auch. Aber ich bin noch nicht zufrieden, damit wie das Bild vergrößert wird.

Hier auf dem Forum habe ich folgendes gefunden:

Java:
	private Image resize(int w, int h, Image img) {
        Image newImage = new Image(Display.getDefault(), w, h);
        GC gc = new GC(newImage);
        gc.setAntialias(SWT.ON);
        gc.setInterpolation(SWT.HIGH);
        gc.drawImage(img, 0, 0, img.getBounds().width, img.getBounds().height, 0, 0, w, h);
        gc.dispose();
        img.dispose();
        return newImage;
    }

Das Bild wird am unteren Rand abgeschnitten und 1,5 mal nebeneinander gezeichnet. Lässt sich das irgendwie einfach beheben? w und h bestimme ich so:

Java:
		int height = parent.getShell().getSize().y;
		int width = parent.getShell().getSize().x;
 

Mappenz

Bekanntes Mitglied
Code:
img.dispose();
auszukommentieren macht keine Unterschied. Img und newImage unterscheiden sich ja auch.
 

Mappenz

Bekanntes Mitglied
Ich habe mal ein Bildschirmfoto gemacht auf dem man sehen kann wie das aussieht, so kann das nicht bleiben. Hat jemand ne Idee? Ich kann mir vorstellen, dass bei
Code:
  gc.drawImage(img, 0, 0, img.getBounds().width, img.getBounds().height, 0, 0, w, h);
das Verhältnis zwischen höhe und breite beibehalten wird. Dann könnte ich das Zielbild einfach in der Breite beschränken. Damit ist aber noch nicht erklärt, warum das Bild unten abgeschnitten wird.
 

Anhänge

  • Bildschirmfoto - 10.08.2011 - 20:46:52.jpg
    Bildschirmfoto - 10.08.2011 - 20:46:52.jpg
    74,9 KB · Aufrufe: 52

Mappenz

Bekanntes Mitglied
Eine der beiden gezeigten Methoden benutze ich ja schon. Ich glaube auch, dass der Fehler darin liegt, dass eine falsche größe berechnet wird. Wenn ich das Fenster in der größe verändere Skalliert das Hintergrundbild nicht mit, die Buttons schon (sollen sie auch). Das kann so natürlich nicht bleiben.
 

Mappenz

Bekanntes Mitglied
mit einem PaintListener kann ich nun Skalieren, aber das ist langsam, füllt den Hintergrund manchmal nicht aus und am schlimmsten: früher oder später wird eine exception no more handlers geworfen. Auch nicht in Ordnung ist, dass die Buttons übermalt werden, man kann aber noch sehen wo sie waren. Habe noch nicht herrausgefunden wie ich die Buttons neu Zeichne. Aber wenn ich den Hintergrund ohnehin nicht mit dem PaintListener skalieren kann, dann sind die Buttons auch egal.

Java:
	public void createPartControl(Composite parent) {
		//*BG image
		final Image originalImg  = Activator.getImageDescriptor("icons/artikelen_afbeelding_96790.jpg").createImage();
		parent.addPaintListener(new PaintListener() {
			
			@Override
			public void paintControl(PaintEvent arg0) {
				Composite parent = ((Composite) arg0.getSource());
				int height = parent.getShell().getSize().y;
				int width = parent.getShell().getSize().x;
				parent.setBackgroundImage(resize(width, height, originalImg));
			}
		});
		parent.setLayout(new FormLayout());
		
		putButtons(parent);		
	}
 

Sonecc

Gesperrter Benutzer
This is potentially inefficient because the scaling must be done each time the canvas repaints itself.
bezüglich der Listener Lösung.

Warum verwendest du nicht folgende Methode:

Java:
final Image image = new Image(display,getClass(),getResourceAsStream("Idea.jpg"));
final int width = image.getBounds().width;
final int height = image.getBounds().height;

final Image scaled050 = new Image(display, image.getImageData().scaledTo((int)(width * 0.5), (int)(height*0.5)));
 

Mappenz

Bekanntes Mitglied
Das entspricht der Lösung die ich ursprünglich hatte und auch nicht ganz funktioniert. Den Fehler sehe ich dabei irgendwo in der gegend der gegend der Bestimmung der Zielgröße. Aber der Grund für den Listener ist dass das Bild tatsächlich auch jedes mal wenn sich die Größe des Views ändert skaliert werden soll.

Mein Ansatz scheint aber schon prinzipiell kaputt zu sein. Eclipse startet nicht vollständig, neben den zuvor genannten Problemen
 

Sonecc

Gesperrter Benutzer
Wenn du bei einem Resize das Hintegrundbild neuskalieren willst, dann ist der Paintlistener falsch dafür!
Implementiere/Erweitere lieber >> org.eclipse.swt.events.ControlAdapter << und hänge das an dein Control an. Dort kannst du die passende Methode zum Resize implementieren.

Ansonsten, sehe ich den Fehler in:

Java:
parent.getShell().getSize()

Was du willst für das Hintergrundbild ist ja nicht die Größe der Shell, sondern des Composites. (Die Shell ist ja deutlich größer, als das Composite, durch statusleiste und Co!)

Und das Bild bitte auch entsprechend disposen wenns nicht mehr benötigt wird, um dem Handles problem entgegenzuwirken
 

Mappenz

Bekanntes Mitglied
Klasse, damit sollten die Probleme erledigt sein. Hatte bis jetzt nicht verstanden, dass ich gar nicht die Größe der Shell will.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
F Eclipse: Plug-In mit eigenen Bildern Plattformprogrammierung 6
F Eclipse: Plug-In mit Ecoding Problem Plattformprogrammierung 7
K Zugriff auf Oracle aus Eclipse Plug-In Plattformprogrammierung 7
D Eclipse Plug-In mit (plug-in) Project Wizard Plattformprogrammierung 2
G WYSIWYG HTML Editor als Eclipse Plug-In Plattformprogrammierung 6
lumo Eclipse Plug-In: Editors und Views Plattformprogrammierung 3
lumo Eclipse 3.5 Plug-In für ein Plug-In Plattformprogrammierung 3
R Eclipse Plug-In Entwicklung Plattformprogrammierung 6
Saxony Eclipse RCP - Erstellungreihenfolge Plug-In und Fragmente Plattformprogrammierung 2
B XML-File Parsen im Eclipse Plug-in Plattformprogrammierung 2
R Integration von JDOM in Eclipse Plug-in Projekt? Plattformprogrammierung 7
R Eclipse Bundles Plattformprogrammierung 2
Robertop RCP Command in bereits bestehendes Eclipse-Menü einbauen Plattformprogrammierung 4
T Java Projekt läuft nur in Eclipse Plattformprogrammierung 6
M Eclipse Plugin PreferencePage BooleanFieldEditor Plattformprogrammierung 1
F OSGi Plugin unter Eclipse arbeitet anders als wenn veröffentlicht Plattformprogrammierung 2
D RCP P2-Repository für Eclipse-Plugins Plattformprogrammierung 0
M Debuging in Eclipse Annotations Processor Plattformprogrammierung 0
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
L0MiN Wie kann ich ein Klassendiagramm aus Eclipse heraus erstellen? Plattformprogrammierung 5
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
feinperligekohlensaeure Eclipse Workspace gemeinsam Nutzen -> keine .project Datei Plattformprogrammierung 1
F Eclipse Build Path auf benötigte Projekte Plattformprogrammierung 4
B Daten von Eclipse extern sichern Plattformprogrammierung 2
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
VfL_Freak [Eclipse] Fehleranzeige im Reiter "Problems" Plattformprogrammierung 1
S Errors in workspace bei eclipse Plattformprogrammierung 3
T eclipse bietet keine META-INF an Plattformprogrammierung 1
N Eclipse wo starten Plattformprogrammierung 6
A Eclipse schließt einfach ohne Fehlermeldung Plattformprogrammierung 4
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
A RCP Eclipse e4 und Injection-Contexts Plattformprogrammierung 0
K Eclipse fährt nicht mehr hoch. Metadatendatei schuld? Plattformprogrammierung 7
C [Eclipse RCP E4]InjectionException: no actual value was found for the argument "MDirtyable" Plattformprogrammierung 8
T Eclipse Eigenschaften hinzufügen Plattformprogrammierung 2
M RCP [Eclipse RCP 3.4] ViewTab Kontextmenu "Alle schließen" Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
S Verschieben des Verzeichnis .eclipse aus Userprofile Plattformprogrammierung 3
A RCP Kann kein Eclipse 4 Projekt anlegen Plattformprogrammierung 0
S RCP Exportiertes RCP Produkt lädt Datei nicht, bei Start aus Eclipse wird Datei jedoch gefunden Plattformprogrammierung 6
G Eine Library in Eclipse zur Verfügung stellen Plattformprogrammierung 14
Gregorrr Eclipse RCP Product Build-Nummer + Jenkins Plattformprogrammierung 6
R Einfaches Eclipse-Plugin-Beispiel funktioniert nicht Plattformprogrammierung 5
H OSGi OSGi + Logback + slf4j - Eclipse Run Configuration Plattformprogrammierung 7
C plugin development environment eclipse Plattformprogrammierung 4
R RCP Commands nutzen / org.eclipse.ui.file.save Plattformprogrammierung 7
O Installiere externe Methode "containsNone" in Eclipse Plattformprogrammierung 2
M Keybinding in Eclipse Plugin Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
B Eclipse Probleme mit build Plattformprogrammierung 8
H Keine Hilfe/API mehr in Eclipse Juno? Plattformprogrammierung 4
B Neue SuppressWarning in Eclipse Juno Plattformprogrammierung 6
B Eclipse Property Page Plattformprogrammierung 6
B Eclipse PreferencePage Plattformprogrammierung 3
B Eclipse Plugin Einstellungsleiste Plattformprogrammierung 2
B Birt-Previewer über Eclipse Plattformprogrammierung 14
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
R Eclipse RCP Tabellen-View (Anfängerfrage) Plattformprogrammierung 3
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
schalentier Eclipse Sourcecode Plattformprogrammierung 4
A Eclipse undo/redo button reagiert nicht auf Änderungen in der OperationHistory Plattformprogrammierung 5
P Eclipse M2_REPO (NON MODIFIABLE) Plattformprogrammierung 8
B Eclipse: Contextmenu id erhalten? Plattformprogrammierung 9
H Datei in eclipse wird nicht erkannt Plattformprogrammierung 3
O Neues Tastenkürzel für Eclipse Editorfenster registrieren Plattformprogrammierung 2
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
Madlip RCP eclipse.ui.bindings (Key-Problematik) Plattformprogrammierung 2
S Eclipse vs. JavaMail vs. Ubuntu vs. Windows Plattformprogrammierung 3
M eclipse führt applikationen nicht mehr aus Plattformprogrammierung 6
S Eclipse: Auf CTRL-C/CTRL-V im Package Explorer? Plattformprogrammierung 4
M Eclipse und Hilfen Plattformprogrammierung 5
G Eclipse buggt rum!!! Plattformprogrammierung 4
B Eclipse RCP und Java 7 Plattformprogrammierung 7
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
T RCP Eclipse RCP: Wo/wann im Plugin ist workbench initialisiert? Plattformprogrammierung 14
M RCP [Eclipse RCP] Feature Export und "Fehler"... Plattformprogrammierung 3
P Eclipse speichert keine Änderungen Plattformprogrammierung 5
M Eclipse - Dokumentation nicht über das Internet benutzen Plattformprogrammierung 3
C Eclipse Plugin NoClassDefFoundError Plattformprogrammierung 4
E org.eclipse.ui.dialogs.ListSelectionDialog erzeugt ClassNotFoundException zur Laufzeit Plattformprogrammierung 4
M Eclipse Plugin Entwicklung - NoClassDefFoundError Plattformprogrammierung 10
C RCP Verständnisfrage Eclipse/Equinox Plattformprogrammierung 4
D eclipse-RCP von der Konsole baut nicht Plattformprogrammierung 3
L RCP Eclipse Popupmenu im PackageExplorer erweitern? Plattformprogrammierung 7
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
S (OSGI - EQUINOX) Welche Eclipse IDE? Plattformprogrammierung 3
C Pdf in jar datei einbinden mit eclipse Plattformprogrammierung 23
G neuer branch in SVN mit Eclipse Plattformprogrammierung 6
F RCP eclipse rcp ohne eclipse? Plattformprogrammierung 15
dzim RCP Eclipse Provisioning Plattformprogrammierung 3
G RCP Abhängigkeiten von Eclipse Plugins Plattformprogrammierung 9
K Eclipse RCP, EMF, Hibernate Problem Plattformprogrammierung 7
B RCP eigenes Eclipse Plugin wird nicht aufgelöst Plattformprogrammierung 7
T Eclipse Helios XMLUnit importieren Plattformprogrammierung 6
R Verwendung pdfbox in Maven-Projekt in Eclipse Plattformprogrammierung 3
lumo RCP wechseln der Font von Eclipse per code Plattformprogrammierung 10
lumo RCP Eclipse internationalisierung Plattformprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben