SWT Bild auf Composite zentrieren

reibi

Top Contributor
Hallo ich zaubere irgendwie mein Bild auf das Composite, welches sich in einem Scrolled Composite befindet.

Wenn das Fenster größer ist als das bild soll das Bild bitteschön in der Mitte des Composites liegen. Und auch wenn ich das Fenster in seiner Größe verändere.

Denke mal das wird ne Layoutfrage sein ... oder? Hab schon alle Layouts ausprobiert ... irgendwie krieg ichs nich hin.

Wie mach ich n das?

Java:
        myComposite.addPaintListener(new PaintListener() {
                public void paintControl(PaintEvent e) {
                    Image image = null;

                    try {
                        image = new Image(Display.getDefault(), new FileInputStream(new File("img/test.jpg")));

                        myScrolledComposite.setMinSize(image.getBounds().width, image.getBounds().height);
                    } // end try
                    catch (Exception e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } // end catch

                    e.gc.drawImage(image, 0, 0);

                    image.dispose();
                } // end paintControl()
            } // end new
        );

Gruß ;-)
 
Zuletzt bearbeitet:
Gib deiner Composite ein GridLayout und ein GridData(GridData.FILL_BOTH).

Deinem Image gibst du dann folgendes GridData:

GridData data = new GridData();
data.horizontalAlignment = SWT.CENTER;
data.verticalAlignment = SWT.CENTER;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
data.horizontalSpan = 1;
data.verticalSpan = 1;


Da musst du ein mit den Parametern "rumspielen", bis es funktioniert.
 
Hi

ich hab jetzt das hier eingetragen

Java:
		GridLayout myGL = new GridLayout();
		myGL.numColumns = 1; 
		
		GridData myGD = new GridData(GridData.FILL_BOTH);
		myGD.horizontalAlignment = SWT.CENTER;
		myGD.verticalAlignment = SWT.CENTER;
		myGD.grabExcessHorizontalSpace = true;
		myGD.grabExcessVerticalSpace = true;
		myGD.horizontalSpan = 1;
		myGD.verticalSpan = 1;
				
		myComposite.setLayout(myGL);
		myComposite.setLayoutData(myGD);

geht trotzdem nicht und hab gar keine Veränderung zu vorher

Gruß
 
Sorry,

mein Fehler. Hab gerade erst gesehen, dass man einem Image kein GridData geben kann. 😳

Dann probier doch mal, um das Image eine neue Composite zu packen und dieser das von mir vorgeschlagene GridData zu geben (nur ein Versuch).
 
HABS RAUSGEFUNDEN ;-)
Für alle die es wissen wollen

Und zwar nix mit Gridlayout !

Shell - muss FlowLayout haben
|->ScrolledComposite
|->Composite


Java:
        myComposite.addPaintListener(new PaintListener() {
                public void paintControl(PaintEvent event) {
                    myScrolledComposite.setMinSize(image.getBounds().width, image.getBounds().height);
                    event.gc.drawImage(image, (myComposite.getBounds().width - image.getBounds().width) / 2, (myComposite.getBounds().height - image.getBounds().height) / 2);
                } // end paintControl()
            } // end new
        );


Gruß ;-)
 

Zurück
Oben