Breite von componenten zu bestimmen SWT

heizer_26

Mitglied
Hallo an alle hier !
Folgende Frage es ist möglich die Breite eines Komponenete zu Bestiemmen?
z.B Ich habe folgende Klasse erstellt:

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;

public class TesterVI
{

private Shell sShell = null; // @jve:decl-index=0:visual-constraint="15,4"

private ProgressBar progressBar = null;

private Composite ImageAndMessagemagecomposite = null;

private Canvas canvas = null;

private ScrolledComposite scrolledComposite = null;

private StyledText styledText = null;

/**
* This method initializes sShell
*/

public TesterVI()
{
// createSShell();
}

private void createSShell()
{

GridData gridData1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gridData1.heightHint = 50;

GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
sShell = new Shell();
sShell.setText("Shell");
sShell.setLayout(gridLayout);
createImageAndMEssagemagecomposite();
createOnlyProgressBar();
sShell.setSize(new Point(359, 131));

}

/**
*
*/
private void createOnlyProgressBar()
{
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 2;
gridData.verticalAlignment = GridData.END;
progressBar = new ProgressBar(sShell, SWT.NONE);
progressBar.setLayoutData(gridData);
}

/**
* This method initializes ImageAndMEssagemagecomposite
*
*/
private void createImageAndMEssagemagecomposite()
{
GridLayout gridLayout1 = new GridLayout();
gridLayout1.numColumns = 3;
GridData gridData2 = new GridData();
gridData2.horizontalAlignment = GridData.FILL;
gridData2.grabExcessHorizontalSpace = true;
gridData2.grabExcessVerticalSpace = true;
gridData2.horizontalSpan = 2;
gridData2.grabExcessHorizontalSpace = true;
gridData2.grabExcessVerticalSpace = true;
gridData2.verticalAlignment = GridData.FILL;
ImageAndMessagemagecomposite = new Composite(sShell, SWT.NONE);
createCanvas();
ImageAndMessagemagecomposite.setLayout(gridLayout1);
createScrolledCompositeWhitCanvas();
ImageAndMessagemagecomposite.setLayoutData(gridData2);
}

/**
* This method initializes canvas
*
*/
private void createCanvas()
{
canvas = new Canvas(ImageAndMessagemagecomposite, SWT.NONE);
}

/**
* This method initializes scrolledComposite
*
*/
private void createScrolledCompositeWhitCanvas()
{
GridData gridData3 = new GridData();
gridData3.horizontalSpan = 2;
gridData3.verticalAlignment = GridData.CENTER;
gridData3.grabExcessHorizontalSpace = true;
gridData3.grabExcessHorizontalSpace = true;
gridData3.horizontalAlignment = GridData.FILL;
scrolledComposite = new ScrolledComposite(ImageAndMessagemagecomposite,
SWT.NONE);
scrolledComposite.setLayoutData(gridData3);
styledText = new StyledText(scrolledComposite, SWT.NONE);
scrolledComposite.setContent(styledText);

System.out.println(gridData3.horizontalAlignment);
System.out.println(gridData3.horizontalIndent);
System.out.println(gridData3.horizontalSpan);
System.out.println(gridData3.minimumWidth);
System.out.println(gridData3.widthHint);

System.out.println("scrolledcomposite "
+ scrolledComposite.getMinWidth());
System.out.println("scrolledcomposite " + scrolledComposite.getMinWidth());
System.out.println("scrolledcomposite " + scrolledComposite.getSize().x );
System.out.println("scrolledcomposite " + scrolledComposite.getBounds().width);
System.out.println("scrolledcomposite " + scrolledComposite.getClientArea().width);
System.out.println("scrolledcomposite " + scrolledComposite.getContent().getSize().x);
}

}
Bei diesen Ausgaben bekome ich immer 0 zurück, mache ich da was falsh?

danke für Ihre Antworten.
 
Hey,

Versuch mal die Methode computeSize(). Als Parameter gibst du zwei mal SWT.DEFAULT an...

Freundliche Grüsse
CKingZesi
 
Die Größe der Komponente steht eigentlich erst fest wenn diese angezeigt wird und der LayoutManager einmal gearbeitet hat.
 
Das hatte ich natürlich vergessen. Kann man nicht die layout() Methode benutzen um dies schon vor dem Öffnen der Shell zu machen?
 
Zurück