Eclipse RCP: View updaten

Status
Nicht offen für weitere Antworten.

bschaefer

Mitglied
Hallo zusammen!

Folgende Situation: Ich habe in meiner Eclipse-RCP-Anwendung eine View, die einen File und einen String als Attribut hat und das Bild aus dem File mit dem String darunter darstellt. Für File und String gibt es noch einen Setter, sodass er zur Laufzeit verändert werden kann. Klappt auch beim Start alles, wie kann ich die View dazu bringen, sich zu aktualisieren, nachdem ich den String und/oder das File geändert habe?

Code:
public class TestView extends ViewPart {

  public static final String ID = "TestView";

  private File imageFile;

  private String imageName;

  public TestView() {
	
  }

  public void createPartControl( Composite parent ) {
    final Image image = new Image( Display.getDefault(), imageFile.getAbsolutePath() );
    Canvas imageCanvas = new Canvas( parent, SWT.BORDER );
    imageCanvas.addPaintListener( new PaintListener() {
      public void paintControl( PaintEvent e ) {
        if ( previewImage == null ) {
          e.gc.drawString( "Error: No image", 0, 0 );
        } else {
          e.gc.drawImage( previewImage, 0, 0 );
        }
      }  
    });
    Label imageLabel = new Label( parent, SWT.CENTER );
    imageLabel.setText(imageName);
  }

  public void setFile( File imageFile ) {
    this.imageFile = imageFile;
  }

  public void setName( String imageName ) {
    this.imageName = imageName
  }

So sieht die Klasse (etwas verkürzt) aus. Bin für jede Hilfe dankbar, vielleicht benutze ich die View auch ganz falsch.
 

Wildcard

Top Contributor
Das hat nichts mit Spitzfindig zu tun. Du musst eine Methode anbieten die dann aufgerufen wird, oder dir ein Observer Konzept überlegen.
Nachtrag:
Vielleicht habe ich gerade dein Problem verstanden. Du denkst, wenn sich irgendwann die Datei und/oder der String ändern, würde sich beim nächsten Zeichnen des ViewParts auch das Ergebnis ändern?
Ein String kann sich gar nicht verändern, er ist unveränderlich.
Eine File Objekt ist nur ein Handle, das sich ebenfalls nicht verändert, höchstens der Inhalt ändert sich, das Handle bekommt davon aber nichts mit.
Du musst also aktiv bescheid sagen, ein 'refresh' reicht nicht.
 

bschaefer

Mitglied
Das war schon klar. Ich dachte nur, es gäbe einen Weg, dass sich der Viewpart einfach mit den aktuell gesetzten Werten neu aufbaut. Also doch "zu Fuß", also eine Refresh-Methode selbst zu schreiben, die das Ding leer macht und neu aufbaut?

Edit:
Hab das dann mal so probiert, klappt jedoch nur, wenn ich das Fenster nachher von Hand verändere, sonst erscheinen die Komponenten nicht. Gibt es eine Möglichkeit, diesen Event (ich denke mal, ein Paint-Event) auszulösen?
 

Wildcard

Top Contributor
Ach so, also du rufst wenn sich was änder setFile und setName auf?

Leg einen Member Composite parent an, den du in createControl befüllst.
In den setter rufst du dann parent.redraw() auf. Wenn ein neues File gesetzt wird, brauchst du auch ein neues Image, also dafür eine Methode anlegen und ein neuer Member für Image.
Das mit dem Image geht so in SWT übrigens nicht, Images müssen disposed werden, sonst bist du sehr schnell out of handles/memory.
 

bschaefer

Mitglied
Danke für den Hinweis. Das parent.redraw() bewirkt in dem Fall jedoch nichts. Erst nach der Größenänderung per Maus wird etwas dargestellt.
 

bschaefer

Mitglied
Hier mal der Code:

Code:
public class TestView extends ViewPart {

	public static final String ID = "TestView";

	private String imageName;
	private File imageFile;
	private Composite parent;
	private Canvas topCanvas;
            private final Image previewImage;

	public TestView() {
	
	}

	@Override
	public void createPartControl(Composite parent) {
		this.parent = parent;
	}
	
	public void refresh() {
		FillLayout fillLayout = new FillLayout();
		parent.setLayout(fillLayout);
		if (topCanvas != null) {
                                    Control[] controls = topCanvas.getChildren();
		            for (Control control: controls) {
			control.dispose();
		}
			topCanvas.dispose();
		}
                        if (previewImage != null) {
                                    previewImage.dispose();
                        }
		topCanvas = new Canvas(parent, SWT.NONE);
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 1;
		topCanvas.setLayout(gridLayout);
		previewImage = new Image(Display.getDefault(), imageFile.getAbsolutePath());
		Canvas previewCanvas = new Canvas(topCanvas, SWT.BORDER);
		previewCanvas.setLayoutData(new GridData(GridData.FILL_BOTH));
		previewCanvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				if (previewImage == null) {
					e.gc.drawString("Error: No image", 0, 0);
				} else {
					e.gc.drawImage(previewImage, 0, 0);
				}
			}
		});
		Label idLabel = new Label(topCanvas, SWT.CENTER);
		idLabel.setText(name);
		parent.redraw();
		parent.update();
	}
	
            public void setFile( File imageFile ) { 
                        this.imageFile = imageFile; 
            } 

            public void setName( String imageName ) { 
                        this.imageName = imageName 
            }

	@Override
	public void dispose() {
		previewImage.dispose();
	}

}

Sollte jetzt so funktionieren, dass immer refresh() aufgerufen werden muss, wenn sich was geändert hat.

Edit:
Eigentlich sollten die Einrückungen nicht so konfus sein ...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Saxony [Eclipse RCP] Von woanders View updaten Plattformprogrammierung 11
R Eclipse RCP Tabellen-View (Anfängerfrage) Plattformprogrammierung 3
E eclipse RCP Properties View: ein Element aus Liste pro Zeile anzeigen Plattformprogrammierung 1
Z Eclipse RCP - UDP Strom in View anzeigen Plattformprogrammierung 4
lumo Eclipse + 'Could not create view' Plattformprogrammierung 5
D Canvas auf View in Eclipse PlugIn Plattformprogrammierung 3
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
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
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
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
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
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
jemandzehage Kurze Fehlernachricht beim starten in Eclipse Plattformprogrammierung 5
A RCP java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter Plattformprogrammierung 7
P Wie bekomme ich ICompilationUnit aus dem event? bei Eclipse-Plugin Plattformprogrammierung 3
Rudolf External Libs dauerhaft in Eclipse einbinden Plattformprogrammierung 3
G RCP Eclipse UI Forms Plattformprogrammierung 10

Ähnliche Java Themen


Oben