main方法当中: Basic1 basic = new Basic1(shell);
public Basic1(Composite parent)
{
this(parent, SWT.NONE); // must always supply parent
}
/**
* Constructor.
*/
public Basic1(Composite parent, int style)
{
//在 SWT 中,所有控件(除了一些高级控件,比如 shell,将在后面进行讨论)在创建的时候都必须有一个父控件(一个复合实例)。
//调用超类构造方法创建顶级控件
// create the button area---Instances of this class are controls which are capable of containing other controls.
//Composite类的实例是一个控制器,用于装在其他的控制器
super(parent, style); // must always supply parent and style
createGui();
}
下面开始 createGui()方法:
1、首先设定布局:setLayout(new GridLayout(1, true));
* GridLayout 提供了一个功能更强大的布局方法,该方法类似于使用 HTML 表的方法。
* 它创建了 2-D 网格的单元格。可以将控件放置在一个或多个单元格中(可以称之为单元格跨越)。
* 单元格的大小可以是相等的,或者是网格宽度或高度的某个给定可变百分比。
* 可以将控件添加到某一行的下一个可用列中,如果这一行中没有更多的列,那么该控件将移动到下一行的第一 列中。
2、// create the input area
//设置分组,并为当前组设置带有标题的明显边界
Group entryGroup = new Group(this, SWT.NONE);
entryGroup.setText("Input Values");//设置标题
下面为当前组设置布局:
// use 2 columns, not same width
GridLayout entryLayout = new GridLayout(2, false);
entryGroup.setLayout(entryLayout);//为当前组指定布局管理
//GridData -----指定每个控件如何使用其单元格中的剩余空间
entryGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
开始按钮设置:
Composite buttons = new Composite(this, SWT.NONE);
buttons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
设置按钮布局:
// make all buttons the same size ----以行或列的形式安排控件
FillLayout buttonLayout = new FillLayout();
buttonLayout.marginHeight = 2;
buttonLayout.marginWidth = 2;
buttonLayout.spacing = 5;
buttons.setLayout(buttonLayout);
为按钮添加事件:使用到了内部类
// OK button prints input values
Button okButton = createButton(buttons, "&Ok", "Process input",
new MySelectionAdapter(){
public void widgetSelected(SelectionEvent e)
{
System.out.println("Name: " + nameField.getText());
System.out.println("Address: " + addrField.getText());
System.out.println("Phone number: " + phoneField.getText());
}
});
// Clear button resets input values
Button clearButton = createButton(buttons, "&Clear", "clear inputs",
new MySelectionAdapter() {
public void widgetSelected(SelectionEvent e)
{
clearFields();
nameField.forceFocus();
}
});
}
这个类当中,有两个地方在技术方面是用的比较不错的,首先是构造方法的地方
public Basic1(Composite parent)
{
this(parent, SWT.NONE); // must always supply parent
}
public Basic1(Composite parent, int style)
{
super(parent, style); // must always supply parent and style
createGui();
}
针对上面代码的学习,我的理解是在创建界面的时候,都会牵扯到布局,先布局,然后将布局应用到特定的创建出来的控件上。其次,所有的控件都是创建在父控件的基础之上的,shell等高级控件例外。
另外就是内部类的使用地方,可以参考学习一下。好像还有适配器模式。再去看看