Hallo Javafreunde,
ich bin mittlerweile seit einiger Zeit an einem Problem dran, dass ich noch nicht lösen konnte. Da ich eine Swing Komponente in einer SWT Shell eingebettet habe (Eclipse RCP-Anwendung), arbeite ich mit dem von Eclipse hierfür entwickelten. Das Ganze sieht in etwa so aus:
"
final JComponent component = helper.createComponent();
SwingControl c = new SwingControl(dialog, SWT.NONE) {
@Override
protected JComponent createSwingComponent() {
return component;
}
public org.eclipse.swt.widgets.Composite getLayoutAncestor() {
return dialog;
}
};
"
Möchte ich nun die Shell mit der Methode pack() "packen", so bekommt die Shell nicht die richtige Größe, da ich denke, dass sie nicht mit der JComponent zusammen arbeiten kann, somit nicht an ihre preferedSize dran kommt.
Also versuche ich gerade eine UtilityKlasse zu schreiben, mit deren Hilfe ich meine Shell "packen" will à la:
"
UtilityClassComponentPack.pack(Shell)
"
Zu diesem Zwecke habe ich mir mal die pack() angeschaut, die in der Klasse Control liegt:
"
public void pack () {
checkWidget ();
pack (true);
}
"
Das checkWidget() spielt meines Erachtens keine Rolle für die Größe, also pack(true):
"
public void pack (boolean changed) {
checkWidget ();
setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
}
"
und nun computeSize(...):
"
public Point computeSize (int wHint, int hHint, boolean changed) {
checkWidget ();
int width = DEFAULT_WIDTH;
int height = DEFAULT_HEIGHT;
if (wHint != SWT.DEFAULT) width = wHint;
if (hHint != SWT.DEFAULT) height = hHint;
int border = getBorderWidth ();
width += border * 2;
height += border * 2;
return new Point (width, height);
}
"
Die Konstante DEFAULT_WIDTH, bzw. HEIGHT sind in der Widget-Klasse mit
"
static final int DEFAULT_WIDTH = 64;
static final int DEFAULT_HEIGHT = 64;
"
angegeben.
Was ich jetzt nicht verstehe: Woher holt sich denn die pack()-Methode die tatsächlichen Größen der Komponenten, die verbaut sind in dem Control. Anscheinend, zumindest meiner Logik nach, bewirkt setSize(computeSize(...)) nichts anderes wie setSize(64,64); dem ist aber nicht so, da die pack() ja unter normalen Umständen problemlos funktioniert.
Kann mir da einer helfen?? Ich denke, es ist nicht so einfach, aber ich würde mich tierisch über ne Antwort freuen!
Vielen Dank,
armin
ich bin mittlerweile seit einiger Zeit an einem Problem dran, dass ich noch nicht lösen konnte. Da ich eine Swing Komponente in einer SWT Shell eingebettet habe (Eclipse RCP-Anwendung), arbeite ich mit dem von Eclipse hierfür entwickelten. Das Ganze sieht in etwa so aus:
"
final JComponent component = helper.createComponent();
SwingControl c = new SwingControl(dialog, SWT.NONE) {
@Override
protected JComponent createSwingComponent() {
return component;
}
public org.eclipse.swt.widgets.Composite getLayoutAncestor() {
return dialog;
}
};
"
Möchte ich nun die Shell mit der Methode pack() "packen", so bekommt die Shell nicht die richtige Größe, da ich denke, dass sie nicht mit der JComponent zusammen arbeiten kann, somit nicht an ihre preferedSize dran kommt.
Also versuche ich gerade eine UtilityKlasse zu schreiben, mit deren Hilfe ich meine Shell "packen" will à la:
"
UtilityClassComponentPack.pack(Shell)
"
Zu diesem Zwecke habe ich mir mal die pack() angeschaut, die in der Klasse Control liegt:
"
public void pack () {
checkWidget ();
pack (true);
}
"
Das checkWidget() spielt meines Erachtens keine Rolle für die Größe, also pack(true):
"
public void pack (boolean changed) {
checkWidget ();
setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
}
"
und nun computeSize(...):
"
public Point computeSize (int wHint, int hHint, boolean changed) {
checkWidget ();
int width = DEFAULT_WIDTH;
int height = DEFAULT_HEIGHT;
if (wHint != SWT.DEFAULT) width = wHint;
if (hHint != SWT.DEFAULT) height = hHint;
int border = getBorderWidth ();
width += border * 2;
height += border * 2;
return new Point (width, height);
}
"
Die Konstante DEFAULT_WIDTH, bzw. HEIGHT sind in der Widget-Klasse mit
"
static final int DEFAULT_WIDTH = 64;
static final int DEFAULT_HEIGHT = 64;
"
angegeben.
Was ich jetzt nicht verstehe: Woher holt sich denn die pack()-Methode die tatsächlichen Größen der Komponenten, die verbaut sind in dem Control. Anscheinend, zumindest meiner Logik nach, bewirkt setSize(computeSize(...)) nichts anderes wie setSize(64,64); dem ist aber nicht so, da die pack() ja unter normalen Umständen problemlos funktioniert.
Kann mir da einer helfen?? Ich denke, es ist nicht so einfach, aber ich würde mich tierisch über ne Antwort freuen!
Vielen Dank,
armin