The following is an example of a
custom Composites that is then used in a window. The Composite uses
a GridLayout and has two Labels, two Text widgets, a
Button and an
inner Composite widget.
The inner Composite widget has been exposed as
a public component using the Expose Component command.
Expose Component converts a component to a field and adds a public
accessor for it. Finally, the background color property of
the first Text widget and the text property of the Button have been exposed as a public properties of the
Composite using
the Expose Property command.
Expose Property adds a
pair of accessors for getting and setting the desired property of
the target widget.
- import
org.eclipse.swt.SWT;
import
org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public
class
CustomComposite extends Composite {
private
Button browseButton;
private
Composite composite;
private
Text secondField;
private
Text firstField;
public
CustomComposite(Composite parent,
int
style) {
super(parent,
style);
createContents();
}
public
void
createContents() {
final
GridLayout gridLayout =
new
GridLayout();
gridLayout.numColumns
= 3;
setLayout(gridLayout);
final
Label firstFieldLabel =
new
Label(this,
SWT.NONE);
firstFieldLabel.setText("First
Field");
firstField
= new
Text(this,
SWT.BORDER);
final
GridData gd_firstField =
new
GridData(SWT.FILL,
SWT.CENTER,
true,
false);
firstField.setLayoutData(gd_firstField);
browseButton =
new
Button(this,
SWT.NONE);
browseButton.setLayoutData(new
GridData(SWT.FILL,
SWT.CENTER,
false,
false));
browseButton.setText("Browse...");
final
Label secondFieldLabel =
new
Label(this,
SWT.NONE);
secondFieldLabel.setText("Second
Field");
secondField =
new
Text(this,
SWT.BORDER);
final
GridData gd_secondField =
new
GridData(SWT.FILL,
SWT.CENTER,
true,
false,
2, 1);
secondField.setLayoutData(gd_secondField);
composite
= new
Composite(this,
SWT.NONE);
composite.setLayoutData(new
GridData(SWT.FILL,
SWT.FILL,
false,
true,
3, 1) );
}
public
Composite getComposite() {
return
composite;
}
public
String getBrowseButtonText() {
return
browseButton.getText();
}
public
void
setBrowseButtonText(String text) {
browseButton.setText(text);
}
public
Color getFirstFieldBackground() {
return
firstField.getBackground();
}
public
void
setFirstFieldBackground(Color background) {
firstField.setBackground(background);
}
}
The window uses a FillLayout
and embeds the custom Composite. The window sets the inner Composite's
layout manager via its accessor exposed in the custom Composite and then adds several new widgets
to the inner Composite. Finally, it overrides the background color for
the first Text widget and the text setting of the Button using the accessors defined in the
embedded Composite.
Note that the exposed inner Composite from the
custom Composite
shows up in the component tree with a small
overlay icon. The other widgets defined in the embedded Composite do not show up in the
tree because they are private to that Composite.
- import
org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import
org.eclipse.swt.layout.GridLayout;
public
class
WindowUsingComposite {
protected
Shell shell;
private
List list;
private
Text thirdField;
private
Text fourthField;
public
static
void
main(String[] args) {
try
{
- WindowUsingComposite window =
new
WindowUsingComposite();
window.open();
}
catch
(Exception e) {
- e.printStackTrace();
}
}
public
void
open() {
final
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while
(!shell.isDisposed())
{
if
(!display.readAndDispatch()) {
- display.sleep();
}
}
}
protected
void
createContents() {
shell
= new
Shell(SWT.SHELL_TRIM);
shell.setLayout(new
FillLayout(SWT.HORIZONTAL));
shell.setSize(450,
384);
shell.setText("Window
Using Composite");
CustomComposite customComposite =
new
CustomComposite(shell,
SWT.NONE);
customComposite.setBrowseButtonText("Find...");
customComposite.setFirstFieldBackground(shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW));
final
GridLayout gridLayout =
new
GridLayout();
gridLayout.numColumns
= 2;
customComposite.getComposite().setLayout(gridLayout);
final
Label thirdFieldLabel =
new
Label(customComposite.getComposite(), SWT.NONE);
thirdFieldLabel.setText("Third
Field");
thirdField
= new
Text(customComposite.getComposite(), SWT.BORDER);
final
GridData gd_thirdField =
new
GridData(SWT.FILL,
SWT.CENTER,
true,
false);
thirdField.setLayoutData(gd_thirdField);
final
Label fourthFieldLabel =
new
Label(customComposite.getComposite(), SWT.NONE);
fourthFieldLabel.setText("Fourth
Field");
fourthField
= new
Text(customComposite.getComposite(), SWT.BORDER);
final
GridData gd_fourthField =
new
GridData(SWT.FILL,
SWT.CENTER,
true,
false);
fourthField.setLayoutData(gd_fourthField);
list
= new
List(customComposite.getComposite(), SWT.BORDER);
list.setItems(new
String[] {"First
Item",
"Second Item"});
list.setLayoutData(new
GridData(SWT.FILL,
SWT.FILL,
false,
true,
2, 1));
}
}
|