SWT中還有一些常用的組件
它們可以使組件更有表現力
且稱之為展現組件
它們在SWT開發中也是不可缺少的
包括菜單組件
工具欄組件ToolBar和ToolItem
工具欄組件CoolBar和CoolItem
滾動組件Slider
刻度組件Scale和進度條組件ProgressBar等
菜單組件
在程序中
菜單是提供信息比較好的方式
SWT中通過Menu和MenuItem實現菜單和菜單項
在程序中添加菜單的步驟如下
(
)創建Menu對象
並指定創建的樣式
例如
menuBar = new Menu(shell
SWT
BAR);
(
)創建MenuItem對象
並指定創建樣式
例如
fileEnglishItem = new MenuItem (fileMenu
SWT
RADIO);
(
)設置Menu和MenuItem的關聯(Menu中還可以有子Menu)
例如
fileMenuHeader
setMenu(fileMenu);
(
)添加MenuItem的事件監聽器
例如
fileEnglishItem
addSelectionListener(new RadioItemListener());
為了更好地掌握菜單
下面通過一個實例演示如何創建菜單
代碼如例程
所示
例程
MenuExample
java
/**
* 為了節省篇幅所有的import類已經被注釋
* 讀者可以通過ctrl+shift+o快捷鍵自動引入所依賴的類
* 如果有問題可發郵件到
* */
public class MenuExample {
Display display;
Shell shell;
Menu menuBar fileMenu editMenu;
MenuItem fileMenuHeader editMenuHeader;
MenuItem fileExitItem fileSaveItem fileEnglishItem fileGermanItem
editCopyItem;
Text text;
public MenuExample() {
display = new Display();
shell = new Shell(display);
shellsetText(Menu Example);
shellsetSize( );
text = new Text(shell SWTBORDER);
textsetBounds( );
//添加主菜單項
menuBar = new Menu(shell SWTBAR);
//添加一級子菜單
fileMenuHeader = new MenuItem(menuBar SWTCASCADE);
fileMenuHeadersetText(&File);
//添加一級子菜單的菜單項
fileMenu = new Menu(shell SWTDROP_DOWN);
fileMenuHeadersetMenu(fileMenu);
fileSaveItem = new MenuItem(fileMenu SWTPUSH);
fileSaveItemsetText(&Save);
fileEnglishItem = new MenuItem(fileMenu SWTRADIO);
fileEnglishItemsetText(English);
fileGermanItem = new MenuItem(fileMenu SWTRADIO);
fileGermanItemsetText(German);
fileExitItem = new MenuItem(fileMenu SWTPUSH);
fileExitItemsetText(E&xit);
editMenuHeader = new MenuItem(menuBar SWTCASCADE);
editMenuHeadersetText(&Edit);
editMenu = new Menu(shell SWTDROP_DOWN);
editMenuHeadersetMenu(editMenu);
editCopyItem = new MenuItem(editMenu SWTPUSH);
editCopyItemsetText(&Copy);
//添加菜單項的事件監聽器
fileExitItemaddSelectionListener(new MenuItemListener());
fileSaveItemaddSelectionListener(new MenuItemListener());
editCopyItemaddSelectionListener(new MenuItemListener());
fileEnglishItemaddSelectionListener(new RadioItemListener());
fileGermanItemaddSelectionListener(new RadioItemListener());
shellsetMenuBar(menuBar);
shellopen();
while (!shellisDisposed()) {
if (!displayreadAndDispatch())
displaysleep();
}
displaydispose();
}
class MenuItemListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
textsetText(You selected + ((MenuItem) eventwidget)getText());
if (((MenuItem) eventwidget)getText()equals(E&xit)) {
shellclose();
}
}
}
class RadioItemListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
MenuItem item = (MenuItem) eventwidget;
textsetText(itemgetText() + is on);
}
}
public static void main(String[] args) {
MenuExample menuExample = new MenuExample();
}
}
以上程序中添加了主菜單並在主菜單中添加了兩個子菜單項子菜單項添加了相應的事件響應機制程序運行效果如圖所示
圖 Menu\MenuItem組件
菜單是可以級聯的在子菜單中還能夠包含其它的菜單項
工具欄組件ToolBar和ToolItem
ToolBar是SWT中的工具欄組件ToolItem是工具欄中的工具項(一般表現為按鈕或分隔符也可以是其他組件)在程序中添加工具欄的步驟如下
創建ToolBar對象並指定創建的樣式例如toolBar = new ToolBar(shell SWTFLAT | SWTWRAP | SWTRIGHT);
創建ToolItem對象並指定創建樣式例如ToolItem itemPush = new ToolItem (toolBar SWTPUSH);
設置ToolItem的圖標和相關屬性例如itemPushsetImage(icon);
添加ToolItem的事件監聽器例如itemPushaddListener(SWTSelectionselectionListener);
為了更好地掌握工具欄組件下面通過一個實例演示如何創建工具欄組件代碼如例程所示
例程 ToolBarExamplejava
public class ToolBarExample {
Display display = new Display();
Shell shell = new Shell(display);
ToolBar toolBar;
public ToolBarExample() {
//添加工具欄
toolBar = new ToolBar(shell SWTFLAT | SWTWRAP | SWTRIGHT);
//添加工具項
ToolItem itemPush = new ToolItem(toolBar SWTPUSH);
itemPushsetText(PUSH item);
//設置工具項的顯示圖標
//Image icon = new Image(shellgetDisplay() icons/newgif);
//itemPushsetImage(icon);
ToolItem itemCheck = new ToolItem(toolBar SWTCHECK);
itemChecksetText(CHECK item);
ToolItem itemRadio = new ToolItem(toolBar SWTRADIO);
itemRadiosetText(RADIO item );
ToolItem itemRadio = new ToolItem(toolBar SWTRADIO);
itemRadiosetText(RADIO item );
ToolItem itemSeparator = new ToolItem(toolBar SWTSEPARATOR);
final ToolItem itemDropDown = new ToolItem(toolBar SWTDROP_DOWN);
itemDropDownsetText(DROP_DOWN item);
itemDropDownsetToolTipText(Click here to see a drop down menu );
final Menu menu = new Menu(shell SWTPOP_UP);
new MenuItem(menu SWTPUSH)setText(Menu item );
new MenuItem(menu SWTPUSH)setText(Menu item );
new MenuItem(menu SWTSEPARATOR);
new MenuItem(menu SWTPUSH)setText(Menu item );
//設置工具項的事件監聽器
itemDropDownaddListener(SWTSelection new Listener() {
public void handleEvent(Event event) {
if (eventdetail == SWTARROW) {
Rectangle bounds = itemDropDowngetBounds();
Point point = toolBartoDisplay(boundsx boundsy
+ boundsheight);
//設置菜單的顯示位置
menusetLocation(point);
menusetVisible(true);
}
}
});
//設置工具項的事件監聽器
Listener selectionListener = new Listener() {
public void handleEvent(Event event) {
ToolItem item = (ToolItem) eventwidget;
Systemoutprintln(itemgetText() + is selected);
if ((itemgetStyle() & SWTRADIO) !=
|| (itemgetStyle() & SWTCHECK) != )
Systemoutprintln(Selection status:
+ itemgetSelection());
}
};
itemPushaddListener(SWTSelection selectionListener);
itemCheckaddListener(SWTSelection selectionListener);
itemRadioaddListener(SWTSelection selectionListener);
itemRadioaddListener(SWTSelection selectionListener);
itemDropDownaddListener(SWTSelection selectionListener);
toolBarpack();
shelladdListener(SWTResize new Listener() {
public void handleEvent(Event event) {
Rectangle clientArea = shellgetClientArea();
toolBarsetSize(puteSize(clientAreawidth
SWTDEFAULT));
}
});
shellsetSize( );
shellopen();
while (!shellisDisposed()) {
if (!displayreadAndDispatch()) {
displaysleep();
}
}
displaydispose();
}
public static void main(String[] args) {
new ToolBarExample();
}
}
程序添加了工具欄並在工具欄中添加了相應的工具項工具項中添加了相應的事件響應機制程序運行效果如圖所示
圖 工具欄組件
本示例顯示了工具欄和菜單欄的配合使用菜單動態設定顯示的位置
工具欄組件CoolBar和CoolItem
CoolBar是另外一種形式的工具欄它能夠調整CoolItem的位置每一個CoolItem可以設定相關的組件(也可以是另一個工具欄)創建CoolBar的步驟如下
創建CoolBar對象並指定創建的樣式例如CoolBar composite = new CoolBar (parent SWTNONE);
創建CoolItem對象並指定創建樣式例如CoolItem item = new CoolItem(composite SWTNONE);
設置CoolItem的Control對象例如itemsetControl(tb);
CoolBar相當於一個面板容器CoolItem是容器中的每一項CoolItem能設置相應的組件作為此項的子容器(也可以是其他組件)為了更好地掌握CoolBar組件下面通過一個實例演示如何創建CoolBar組件代碼如例程所示
例程 CoolBarExamplejava
public class CoolBarExample extends ApplicationWindow {
public CoolBarExample() {
super(null);
}
protected Control createContents(Composite parent) {
getShell()setText(CoolBar Test);
String asCoolItemSection[] = { File Formatting Search };
//添加CoolBar
CoolBar composite = new CoolBar(parent SWTNONE);
for (int idxCoolItem = ; idxCoolItem < ; ++idxCoolItem) {
CoolItem item = new CoolItem(composite SWTNONE);
//添加子組件
ToolBar tb = new ToolBar(composite SWTFLAT);
for (int idxItem = ; idxItem < ; ++idxItem) {
ToolItem ti = new ToolItem(tb SWTNONE);
ti
setText(asCoolItemSection[idxCoolItem] + Item #
+ idxItem);
}
Point p = puteSize(SWTDEFAULT SWTDEFAULT);
tbsetSize(p);
Point p = puteSize(px py);
//設置為一個CoolItem的控制類
itemsetControl(tb);
itemsetSize(p);
}
return composite;
}
public static void main(String[] args) {
CoolBarExample app = new CoolBarExample();
appsetBlockOnOpen(true);
appopen();
DisplaygetCurrent()dispose();
}
}
以上代碼演示了如何創建CoolBarCoolBar中每一個CoolItem可以根據用戶的需要調整位置程序運行效果如圖所示
圖 CoolBar組件
CoolBar和ToolBar的展現樣式不一樣CoolBar可以動態調整工具欄的位置
滾動組件Slider
為了方便用戶輸入數據SWT中提供了Slider組件用戶可通過Slider設置數據的增量值用來控制其他組件也可以作為滾動條控制其他組件中的數據顯示添加Slider組件的步驟如下
創建Slider對象並指定創建的樣式例如Slider slide = new Slider(shell SWTHORIZONTAL);
設置Slider的最大值和最小值例如slidesetMaximum();
設置Slider增量的增加或遞減值例如slidesetIncrement();
添加Slider的事件監聽器例如slideaddSelectionListener(selectionListener);
為了更好地掌握Slider組件下面通過一個實例演示如何創建Slider組件代碼如例程所示
例程 SliderExamplejava
public class SliderExample {
Display dispaly;
Shell shell;
SliderExample() {
dispaly = new Display();
shell = new Shell(dispaly);
shellsetSize( );
shellsetText(A Slider Example);
//添加Slider對象
final Slider slide = new Slider(shell SWTV_SCROLL);
//設置Slider的位置和大小
slidesetBounds( );
//設置Slider的最小值
slidesetMinimum();
//設置Slider的最大值
slidesetMaximum();
//設置Slider單擊左右箭頭的增加或遞減值
slidesetIncrement();
final Text t = new Text(shell SWTBORDER);
tsetBounds( );
tsetText();
tsetFocus();
//添加Slider的事件監聽器
slideaddSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
tsetText(new Integer(slidegetSelection())toString());
}
});
shellopen();
while (!shellisDisposed()) {
if (!dispalyreadAndDispatch())
dispalysleep();
}
dispalydispose();
}
public static void main(String[] args) {
new SliderExample();
}
}
以上代碼添加了一個Text組件和一個Slider組件Slider組件設置了增量值為另外Slider組件添加了選擇事件當選擇了Slider組件後Slider將為Text組件賦值程序運行效果如圖所示
圖 Slider組件
Slider組件要配合其它的組件使用輔助其它的組件完成功能
刻度組件Scale
Scale和Slider類似
在SWT中都表示一種尺度
但兩者的表現形式不一樣
Scale更像一個刻度
而Slider則是提供一個滾動條
添加Scale組件的步驟如下
創建Scale對象
並指定創建的樣式
例如
Scale scale = new Scale(shell
SWT
VERTICAL);
設置Scale的最大值和最小值
例如
scale
setMaximum(
);
設置Scale增量的增加或遞減值
例如
scale
setPageIncrement(
);
添加Scale的事件監聽器
例如
scale
addSelectionListener(selectionListener);
為了更好地掌握Scale組件
下面通過一個實例演示如何創建Scale組件
代碼如例程
所示
例程
ScaleExample
java
public class ScaleExample {
Display display = new Display();
Shell shell = new Shell(display);
Scale scale;
Text value;
public ScaleExample() {
shellsetLayout(new GridLayout( true));
Label label = new Label(shell SWTNULL);
labelsetText(Volume:);
//添加Scale組件
scale = new Scale(shell SWTVERTICAL);
scalesetBounds( );
//設置Scale的最大值
scalesetMaximum();
//設置Scale的最小值
scalesetMinimum();
//設置Scale的增量值
scalesetPageIncrement();
//添加Scale的事件監聽器
scaleaddListener(SWTSelection new Listener() {
public void handleEvent(Event event) {
int perspectiveValue = scalegetMaximum() scalegetSelection() +
scalegetMinimum();
valuesetText(Vol: + perspectiveValue);
}
});
value = new Text(shell SWTBORDER | SWTSINGLE);
valuesetEditable(false);
scalesetLayoutData(new GridData(GridDataHORIZONTAL_ALIGN_CENTER));
valuesetLayoutData(new GridData(GridDataHORIZONTAL_ALIGN_CENTER));
shellpack();
shellopen();
while (!shellisDisposed()) {
if (!displayreadAndDispatch()) {
displaysleep();
}
}
displaydispose();
}
private void init() {
}
public static void main(String[] args) {
new ScaleExample();
}
}
上例中通過事件監聽器監聽當前選擇的刻度並用Text組件顯示出來程序運行效果如圖所示
圖 Scale組件
Scale組件能夠精確的顯示刻度用戶可以設制好刻度的范圍這是非常有用的
進度條組件ProgressBar
ProgressBar是SWT中的進度條組件進度條提供了比較長時間操作的進度信息添加ProgressBar組件的步驟如下
創建ProgressBar對象並指定創建的樣式例如ProgressBar pb = new ProgressBar (shell SWTHORIZONTAL | SWTSMOOTH);
設置ProgressBar的最大值和最小值例如pbsetMaximum();
在長時間的任務中設置當前進度條的進度例如progressBarsetSelection (progressBargetSelection() + );
進度條能反映當前的工作進度為了配合處理長時間的任務進度條經常配合線程使用以免產生阻塞影響界面的操作為了更好地掌握ProgressBar組件下面通過一個實例演示如何創建ProgressBar組件代碼如例程所示
例程 ProgressBarExamplejava
public class ProgressBarExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shellsetLayout(new GridLayout());
//添加平滑的進度條
ProgressBar pb = new ProgressBar(shell SWTHORIZONTAL | SWTSMOOTH);
pbsetLayoutData(new GridData(GridDataFILL_HORIZONTAL));
//設置進度條的最小值
pbsetMinimum();
//設置進度條的最大值
pbsetMaximum();
//添加自動遞增的進度條
ProgressBar pb = new ProgressBar(shell SWTHORIZONTAL |
SWTINDETERMINATE);
pbsetLayoutData(new GridData(GridDataFILL_HORIZONTAL));
//添加線程在線程中處理長時間的任務並最終反映在平滑進度條上
new LongRunningOperation(display pb)start();
shellopen();
while (!shellisDisposed()) {
if (!displayreadAndDispatch()) {
displaysleep();
}
}
}
}
class LongRunningOperation extends Thread {
private Display display;
private ProgressBar progressBar;
public LongRunningOperation(Display display ProgressBar progressBar) {
thisdisplay = display;
thisprogressBar = progressBar;
}
public void run() {
//模仿長時間的任務
for (int i = ; i < ; i++) {
try {
Threadsleep();
} catch (InterruptedException e) {
}
displayasyncExec(new Runnable() {
public void run() {
if (progressBarisDisposed()) return;
//進度條遞增
progressBarsetSelection(progressBargetSelection() + );
}
});
}
}
}
以上代碼添加了兩個進度條一個進度條為自動顯示增加進度的信息(SWTINDETERMINAT樣式)另外一個進度條通過線程處理長時間的任務並設定進度條的信息程序運行效果如圖所示
圖 ProgressBar組件
進度條有不同的樣式在程序中開發人員可以控制進度條的進度執行某些長時間的操作
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28550.html