国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Swt常用控件中文教程

2024-07-21 02:15:06
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!

  1、eclipse中swt的配置

  建議配置:jdk1.4.2以及eclipse3.1

  在代碼中調用swt控件之前,首先建立一個項目,然后選擇該項目的properties -> java build path,將standard widget toolkit加入到library頁當中。如下圖所示:

  接下來可以建立第一個eclipse小程序,新建一個class,并且在該class所對應的代碼中輸入如下程序,其中package以及class名稱根據實際情況來確定名稱。

package mypakage;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
/*導入需要的類庫*/
public class myfrm1 {
public myfrm1() {
super();
}
public static void main(string[] args) {
display display = new display();
shell shell = new shell(display);
/*shell為一個窗口對象*/
label label = new label(shell, swt.none);
label.settext("hello, world!"); /*創建一個標簽對象并且設置標題文字*/
label.pack();
shell.pack();
shell.open(); /*打開并顯示窗口*/

while(!shell.isdisposed())
if(!display.readanddispatch())
display.sleep(); /*在窗口沒有銷毀之前,顯示對象一直處于等待狀態*/

display.dispose(); /*否則,銷毀對象,釋放對象所占據的資源*/
label.dispose();
}
}

  運行上述代碼(run -> debug -> swt application)將產生如下所示的一個窗口

  2、button的使用

  按鈕可能的類型有很多,例如:

swt.border 含有邊框的按鈕

swt.check 復選按鈕

swt.push 普通按鈕

swt.radio 單選按鈕

  3、text的使用

  文本框的類型也有很多種選擇,例如:

swt.border 含有邊框

swt.read_only 只讀

  下圖為包含按鈕以及文本框的窗口

  設計上述窗口所對應的代碼為:

package mypakage;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.swt;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
public class myfrm1 {
public myfrm1() {
super();
}
public static void main(string[] args) {
display display = new display( );
shell shell = new shell(display);
shell.setsize(300, 200);
shell.setlayout(new rowlayout( ));
shell.settext("button example");
final button button = new button(shell, swt.border);
button.settext("click me");
final text text = new text(shell, swt.border);
shell.open( );

while(!shell.isdisposed( )) {
if(!display.readanddispatch( )) display.sleep( );
}
display.dispose( );
}
}

  如果想對控件的位置以及大小進行精確的設置,可以使用setbounds(x, y, width, height)方法來取代shell.setlayout(new rowlayout( ))。例如:button.setbounds(80, 80, 90, 20);

  button的監聽及事件處理

  對按鈕單擊事件處理的代碼:

button.addselectionlistener(new selectionlistener( )
{
public void widgetselected(selectionevent event)
{
text.settext("no worries!");
}
public void widgetdefaultselected(selectionevent event)

{
text.settext("no worries!");
}
});

  將以上代碼加入到shell.open之前,當點擊按鈕時產生以下效果:


  分析:由于為button按鈕增加了一個監聽器,按鈕時刻處于被“監控”的狀態,當按鈕控件被選擇(點擊)既選擇事件發生時,對文本控件進行賦值”no worries”。

  根據監聽事件的原理,設計如下程序,該程序能夠獲得鼠標的x坐標,顯示在文本框中:

package mypakage;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.swt;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;

public class myfrm1 {
public myfrm1() {
super();
}
public static void main(string[] args) {
display display = new display( );
shell shell = new shell(display);
shell.setsize(300, 200);
shell.setlayout(new rowlayout( ));
final text text = new text(shell, swt.shadow_in);

shell.addmousemovelistener(new mousemovelistener( )
{
public void mousemove(mouseevent e)
{
integer y=new integer(e.x); /*將x坐標轉換為integer類型的對象*/
text.settext(y.tostring());
}
});

shell.open( );
while(!shell.isdisposed( )) {
if(!display.readanddispatch( )) display.sleep( );
}
display.dispose( );
}
}

  監聽方式:

controllistener 用于處理移動以及尺寸變化

focuslistener 用于處理得到焦點以及失去焦點

keylistener 處理按鍵的輸入

mouselistener , mousemovelistener, mousetracklistener 對鼠標的動作進行處理

selectionlistener 處理控件的選擇行為(包括按鈕的點擊)

  注意:監聽方式與其所能夠處理的事件具有一定的關聯性,既監聽方式決定了所能夠處理事件的種類,例如:

shell.addmouselistener(new mouselistener( )
{
public void mousemove(mouseevent e)
{text.settext("mousemove");}
public void mousedoubleclick(mouseevent e)
{text.settext("mousedbclc");}
public void mousedown(mouseevent e)
{}
public void mouseup(mouseevent e)
{}
});

  你會發現在鼠標移動時,text.settext("mousemove");始終不能夠執行;并且mousedown、mouseup事件不能夠省略,原因就在于mouselistener只能處理mousedoubleclick、mousedown、mouseup三類事件,而且這三類事件不能夠分離。

  3、list控件

  list控件的樣式包括:

swt.border 含有邊框

swt.h_scroll 含有水平滾動條

swt.v_scroll 含有垂直滾動條

swt.single 允許單選

swt.multi 允許復選

  若要創建一個含有從11個元素的list,可以通過以下代碼來實現

final list list = new list (shell, swt.single);
for (int i=0;i<=10;i++)
list.add("item"+i);

  以下實例能夠判斷list控件中所選擇的選項,并且輸出顯示在控制臺中:

package mypakage;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.swt;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
public class myfrm1 {
public myfrm1() {
super();
}
public static void main(string[] args) {
display display = new display ( );
shell shell = new shell (display);
shell.settext("list example");
shell.setsize(300, 200);
shell.setlayout(new filllayout(swt.vertical));
final list list = new list (shell, swt.border | swt.multi | swt.v_scroll);
for (int loopindex = 0; loopindex < 100; loopindex++){
list.add("item " + loopindex);
}
list.addselectionlistener(new selectionlistener( )
{
public void widgetselected(selectionevent event)
{
int selections[] = list.getselectionindices ( );
string outtext = "";
for (int loopindex = 0; loopindex < selections.length;
loopindex++) outtext += selections[loopindex] + " ";
system.out.println ("you selected: " + outtext);
}
public void widgetdefaultselected(selectionevent event)
{
int [] selections = list.getselectionindices ( );
string outtext = "";
for (int loopindex = 0; loopindex < selections.length; loopindex++)
outtext += selections[loopindex] + " ";
system.out.println ("you selected: " + outtext);
}
});
shell.open ( );
while (!shell.isdisposed ( )) {
if (!display.readanddispatch ( )) display.sleep ( );
}
display.dispose ( );
}
}

  效果圖:

  you selected: 4 5 6 7 8 9 10

  分析:list.getselectionindices ( )方法將會獲得被選擇項目的集合, selections[]或者[] elections表示動態一維數組。

  4、menu控件

  建立菜單的一般步驟為:

  1、在建立菜單時,首先需要建立一個菜單欄,需要使用swt.bar屬性

  menu menubar = new menu(shell, swt.bar);

  2、在菜單欄的基礎之上,創建下拉菜單的所對應的頂級菜單項,需要使用swt.cascade屬性
filemenuheader = new menuitem(menubar, swt.cascade);

  filemenuheader.settext("&file");

  3、建立與頂級菜單項相關的下拉式菜單

  dropmenu1 = new menu(shell, swt.drop_down);

  4、將頂級菜單項與下拉菜單關聯

menuheader1.setmenu(dropmenu1);

  5、為下拉菜單添加子菜單項

dropitem1= new menuitem(dropmenu1, swt.push);
dropitem1.settext("open");

  6、最后,在窗口中指定需要顯示的菜單欄

shell.setmenubar(menubar);

  菜單的監聽及事件

  參照按鈕的監聽以及事件,設計如下程序,當點擊 file子菜單下的“open”時,在文本框中顯示“click open menu!”

dropitem1.addselectionlistener(new selectionlistener()
{
public void widgetselected(selectionevent event)
{
text.settext("click open menu!");
}
public void widgetdefaultselected(selectionevent event)
{
text.settext("click open menu!");
}
});

  5、使用工具欄toobar

  建立工具欄可以通過如下方式:toolbar toolbar = new toolbar(shell, swt.none);

  在工具欄的基礎之上創建工具欄子按鈕,并且設置子按鈕的標題:

toolitem item1 = new toolitem(toolbar, swt.push);
item1.settext("item1");

  例如:

toolbar toolbar = new toolbar(shell, swt.none);
toolitem item1 = new toolitem(toolbar, swt.push);
item1.settext("item1");
toolitem item2 = new toolitem(toolbar, swt.push);
item2.settext("item2");

  工具欄的監聽及事件

  實例:創建一個監聽對象,將該監聽對象應用于每一個按鈕,最終來判斷鼠標點擊的是哪一個按鈕,效果圖如下。

listener listener = new listener( ) {
public void handleevent(event event) {
toolitem item =(toolitem)event.widget;
string string = item.gettext( );
text.settext("you selected:" + string); }
};
item1.addlistener(swt.selection, listener);
item2.addlistener(swt.selection, listener);
item3.addlistener(swt.selection, listener);
item4.addlistener(swt.selection, listener);

  6、滾動條slider的使用

  滾動條分為有邊框、垂直、水平三種類型,利用slider.setbounds方法可以指定滾動條所在的位置。

  滾動條所能夠處理事件的包括:

swt.arrow_down 向下或向右按鈕被點擊

swt.arrow_up 向左或向上按鈕被點擊

swt.drag 滑塊按鈕被托動

swt.end 滑塊到達終點

swt.home 滑塊到達起點

swt.page_down 下方或右側的滾動條被點擊

swt.page_up 上方或左側的滾動條被點擊

  實例:根據滑塊的位置移動按鈕位置

slider.addlistener(swt.selection, new listener( ) {

public void handleevent(event event) {

switch(event.detail) {

case swt.arrow_down: button.setbounds(slider.getselection(),0,20,10);

break;

case swt.arrow_up:button.setbounds(slider.getselection(),0,20,10);

break;

case swt.drag:button.setbounds(slider.getselection(),0,20,10);

break;

case swt.end:button.setbounds(slider.getselection(),0,20,10);

break;

case swt.home:button.setbounds(slider.getselection(),0,20,10);

break;

case swt.page_down:button.setbounds(slider.getselection(),0,20,10);

break;

case swt.page_up:button.setbounds(slider.getselection(),0,20,10);

break;

}
}

});

  7、樹形控件tree

  樹形控件使用的方法為,首先創建一個tree類型的對象,其次在該對象的基礎之上繼續擴展節點,以及擴展節點的子節點。

  final tree tree = new tree(shell, swt.border);

  可以利用tree.setsize方法來改變樹形控件的大小。在創建節點時,需要指明該節點所依賴的父節點的名稱,如treeitem item0 = new treeitem(tree, 0);,那么item0將成為tree對象中的0級(頂級)節點。

  如下程序將在tree對象的基礎之上產生9個節點:

final tree tree = new tree(shell, swt.border);

tree.setsize(290, 290);

for(int loopindex1 = 2000; loopindex1 <= 2008; loopindex1++) {

treeitem item0 = new treeitem(tree, 0);

item0.settext("year " + loopindex1);

}

  在上述實例的基礎上為每一個0級節點的基礎上擴展出12個節點:

for(int loopindex1 = 2000; loopindex1 <= 2008; loopindex1++) {

treeitem item0 = new treeitem(tree, 0);

item0.settext("year " + loopindex1);

for(int loopindex2 = 1; loopindex2 <= 12; loopindex2++) {

treeitem item1 = new treeitem(item0, 0);

item1.settext("month " + loopindex2);
}

}

  8、對話框dialog

  對話框是一個依托于主窗體的子窗體,如圖所示。

  例如:當在主窗體中點擊按鈕時,彈出一個對話框dialog,當關閉對話框時按鈕顯示“dialog is disposed”

display display = new display( );

final shell shell = new shell(display);

shell.setsize(300, 200);

shell.settext("main");

final button opener = new button(shell, swt.push);

opener.settext("click me");

opener.setbounds(20, 20, 50, 25);

final shell dialog = new shell(shell, swt.application_modal |

swt.dialog_trim);

dialog.settext("dialog");

dialog.setbounds(10,10,50,60);

dialog.adddisposelistener(new disposelistener(){

public void widgetdisposed(disposeevent e){

opener.settext("dialog is disposed");

}
});

listener openerlistener = new listener( ) {

public void handleevent(event event) {

dialog.open( );

}

};

opener.addlistener(swt.selection, openerlistener);

shell.open( );

while(!dialog.isdisposed( )) {

if(!display.readanddispatch( )) display.sleep( );

}

while (!shell.isdisposed( )) {

if (!display.readanddispatch( ))

display.sleep( );

}

display.dispose( );

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵州省| 新晃| 沂南县| 自治县| 沐川县| 措勤县| 启东市| 南平市| 逊克县| 瑞安市| 成安县| 永平县| 高密市| 台南市| 蒙山县| 隆化县| 汶上县| 马关县| 济南市| 临沂市| 西林县| 邵东县| 麟游县| 华坪县| 日喀则市| 巴南区| 湖北省| 蒙山县| 宜兴市| 桑日县| 兴文县| 贞丰县| 益阳市| 吉林省| 普格县| 融水| 洛南县| 武威市| 宁波市| 临颍县| 祥云县|