PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eclipse RCP: View aktualisieren



SirLacy
02-05-2008, 13:16
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 geändert habe?



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.

Waxolunist
05-05-2008, 09:35
Ich denke, du musst die repaint() Methode überschreiben oder sie zumindest aufrufen. Nur aufrufen wird wahrscheinlich nicht genügen.

SirLacy
05-05-2008, 09:49
Ein Viewpart hat leider nicht sowas wie eine Repaint-Methode und die Repaint-Methoden des Labels und der Canvas bringen auch nicht das gewünschte Ergebnis, auch nicht, nachdem nochmal update() aufgerufen wurde.

Waxolunist
05-05-2008, 12:45
Sorry, ich bin leider zu wenig mit RCP beschäftigt. Aber so wie ich das sehe in diesem Beispiel (http://www.eclipse.org/articles/Article-Image-Viewer/Image_viewer.html), sollte der Viewpart nur ein Canvas halten, welches dann repainted wird.


Vielleicht musst du einfach hier etwas umstruktieren.

Lg, Christian

SirLacy
05-05-2008, 14:23
Ich habs schlussendlich hingekriegt, mit Hilfe aus java-forum.org. Habe eine refresh-Methode selbst implementiert und der Schlüssel war dann der layout()-Aufruf für die Canvas.