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

首頁 > 學院 > 開發設計 > 正文

SWT/JFace入門指南之讓SWT程序動起來

2019-11-18 15:14:07
字體:
來源:轉載
供稿:網友

  我不知道大家有沒有這樣的體驗:其實軟件使用者要求的東西都很基本,而現在軟件做得越來越復雜,有相當大一部分是在于軟件開發者把自己的注重力放在了一些附加功能(這些功能可能讓用戶感到驚喜,但是假如沒有它們用戶也不會不滿足)上,而真正用戶的要求卻得不到滿足。所以大家在設計程序的時候,一定要明白,有時候簡單就是一種美,把時間花費到真正有價值的地方去。

  OK,回到我們的主題上來。在這一節中,我將給大家介紹swt的事件模式。在前面我們也提到過,寫一個swt程序,無非就是分幾步走。其中比較需要費心的就是布置好用戶界面和處理各種事件。

  添加了事件處理的Hello,world!

  其實swt中處理事件非常簡單,對應于各種事件都有相應的listener類,假如一種事件叫做Xyz,那么對應的listener類就是XyzListener。比如對應于鼠標事件的有MouseListener,對應于鍵盤事件的就是KeyListener。而在每種widget中,對于它可以處理的事件都有addXyzListener方法,只要把對應的listener實例作為參數傳給它就可以了。

  為了更加清楚的說明,我們先來看下面一段程序:

1 public class EventDemo {
2
3 PRivate Shell _shell;
4
5 public EventDemo() {
6 Display display = new Display();
7 Shell shell = new Shell(display,SWT.SHELL_TRIM);
8 setShell(shell);
9 RowLayout layout=new RowLayout();
10 shell.setLayout(layout);
11 shell.setText("Event demo");
12
13 Button button=new Button(shell,SWT.PUSH SWT.CENTER);
14 button.setText("Click me!");
15
16 button.addSelectionListener(new SelectionListener(){
17
18 public void widgetSelected(SelectionEvent event) {
19 handleSelectionEvent();
20 }
21
22 public void widgetDefaultSelected(SelectionEvent event) {
23 }
24 });
25 shell.setBounds(200,300,100,100);
26 shell.open();
27
28 while (!shell.isDisposed()) {
29 if (!display.readAndDispatch()) {
30 display.sleep();
31 }
32 }
33 display.dispose();
34
35 }
36
37 protected void handleSelectionEvent() {
38 MessageBox dialog=new MessageBox(getShell(),SWT.OKSWT.ICON_INFORMATION);
39 dialog.setText("Hello");
40 dialog.setMessage("Hello,world!");
41 dialog.open();
42 }
43
44 /**
45 * @param args
46 */
47 public static void main(String[] args) {
48
49 EventDemo eventdemo=new EventDemo();
50 }
51
52 /**
53 * @return Returns the _shell.
54 */
55 public Shell getShell() {
56 return _shell;
57 }
58
59 /**
60 * @param _shell The _shell to set.
61 */
62 public void setShell(Shell shell) {
63 this._shell =shell;
64 }
65 }
66
  代碼段 6

  你可以看到在這段程序中,我們只創建了一個Button,隨后調用了它的addSelectionListener()方法,在這個新創建的Listener,我們只為widgetSelected方法添加了代碼,并在其中創建了一個對話框。

  假如總結一下,我們可以得出處理事件的幾個步驟:

  1. 針對你所處理的事件,找出合適的XyzListener接口

  2. 編寫一個新的類,這個類實現了XyzListener接口

  3. 在你所感愛好的事件中編寫處理代碼,而對于那些你不感愛好的方法可以讓它們保持空白(就像實例中的widgetDefaultSelected()方法)一樣

  讓事件處理更加簡單:使用適配器(adapter)

  有時候我們可能會感覺這樣仍然不夠簡單,比如我只對SelectionListener中的widgetSelected()方法感愛好,但是為了能夠通過編譯器的編譯,我卻不得不寫一個空白的widgetDefaultSelected()方法(因為SelectionListener是一個接口,你必須實現它所有的方法)。

  幸運的是,swt幫我們解決了這個問題,途徑就是使用adapter。在swt中,對應于一個XyzListener都有一個XyzAdapter,adapter都是抽象類并且實現了對應的listener接口,它為對應listener接口中的每個方法都定義了一個默認實現(基本上就是什么都不做),我們在使用時候只需要override掉自己感愛好的方法就可以了。

  結合上一小節中的代碼,假如使用SelectionAdapter代替SelectionListener的話,我們的代碼就可以這樣寫:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永济市| 旬邑县| 大余县| 岳池县| 夹江县| 仪征市| 三江| 沁阳市| 云林县| 黄山市| 酒泉市| 观塘区| 金川县| 柞水县| 绵阳市| 来安县| 乌鲁木齐县| 宜昌市| 汉中市| 梓潼县| 天峻县| 靖安县| 通州区| 黎川县| 株洲市| 屏边| 民丰县| 仁怀市| 甘洛县| 孟州市| 永济市| 伊宁县| 正安县| 封开县| 涡阳县| 美姑县| 西贡区| 读书| 泗洪县| 稷山县| 古浪县|