java 12 pengenalan gui dengan eclipse swt

Upload: muhammad-junaid-musa

Post on 10-Feb-2018

246 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    1/39

    Bab XII - Pengenalan GUI dengan Eclipse SWT

    SWT adalah GUI berbagai platform yang dikembangkan oleh IBM. Kenapa IBM membuat sistem GUI

    lain dan tidak menggunakan rangka kerja GUI yang sudah ada pada a!a" Untuk menja#ab pertanyaanini$ kita perlu melihat kilas balik tentang a!a di a#al perkembangannya.

    Sun telah membuat rangka kerja GUI yang dinamakan %WT &%bstra't Windo#ing Toolkit(. )angka

    kerja %WT menggunakan #idget &komponen pada GUI$ seperti tombol$ menu$ teks$ dll( alami yang

    merupakan ba#aan dari setiap sistem operasi. %kan tetapi #idget tersebut memiliki masalah pada*+,. Masalah *+, ini mengakibatkan hilangnya beberapa fitur pada sistem operasi lain. %tau dengan

    kata lain$ jika platform % memiliki #idget - /0 dan platform B memiliki #idget 10 12$ maka rangka

    kerja %WT hanya bisa digunakan untuk sebagian #idget yang beririsan saja.

    Untuk meme'ahkan masalah ini$ Sun membuat rangka kerja baru yang merupakan emulasi #idget$bukan menggunakan #idget ba#aan platform. 3al ini meme'ahkan masalah *+, dan memberikan

    rangka kerja yang kaya #idget$ akan tetapi masalah lain mun'ul. Misalnya$ aplikasi S#ing tidak lagi

    mirip seperti aplikasi lain pada platform di mana ia dijalankan.

    ,engan adanya perbaikan pada 4M$ aplikasi S#ing tetap saja mengalami masalah kinerja karenasifatnya yang berupa emulasi. 3al ini tidak ditemukan pada #idget ba#aan platform karena #idget ini

    lebih dekat dengan sistem operasi. *ebih jauh$ aplikasi S#ing menghabiskan lebih banyak memori

    yang tidak bisa digunakan untuk piranti ke'il seperti 5,% dan telepon genggam.

    IBM memutuskan bah#a pendekatan tersebut tidak memenuhi kebutuhannya. %khirnya$ IBM membuatpustaka GUI baru yang disebut SWT$ yang meme'ahkan masalah yang terdapat pada rangka kerja

    %WT dan S#ing. )angka kerja SWT langsung mengakses #idget ba#aan sistem operasi melalui 6I.

    ika #idget tersebut tidak tersedia$ maka SWT akan mengemulasi #idget yang hilang itu.

    Blok Penyusun Suatu Aplikasi SWT

    ,isplay$ Shell dan kumpulan Widget adalah blok penyusun aplikasi SWT. ,isplay bertugas untuk

    mengatur perulangan e!ent &dari keyboard atau mouse( dan mengatur komunikasi antara thread UI dan

    thread lainnya. Shell adalah jendela di mana aplikasi berjalan. Setiap aplikasi SWT memiliki palingtidak satu ,isplay dan satu atau lebih instansi Shell.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    2/39

    Gambar di atas mengilustrasikan aplikasi SWT dari sudut pandang yang berbeda. ,iagram pertama di

    sebelah kiri adalah diagram kelaskelas turunan dari objekobjek UI. ,iagram tengah adalah bagaimana

    objek UI diletakkan$ dan gambar kanan adalah UI yang dihasilkan.

    ika suatu aplikasi menggunakan beberapa thread$ setiap thread akan memiliki instansi objek ,isplaymasingmasing. Kita bisa mengambil instansi suatu objek ,isplay dengan menggunakan metode statik

    Display.getCurrent().

    Suatu Shell melambangkan jendela suatu aplikasi. Shell bisa ditampilkan dalam ukuran seluruh layar$

    ukuran biasa$ atau dike'ilkan hingga tak terlihat. %da dua jenis shell yang tersedia. 7ang pertamaadalah shell dengan tingkat paling tinggi$ yaitu yang dibuat langsung sebagai anak dari jendela utama

    ,isplay. enis kedua adalah shell dialog yang bergantung pada shellshell lainnya.

    enis suatu Shell bergantung padabit gaya&style bit( yang diberikan pada konstruktornya. 6ilai

    a#alnya adalah DialogShell. %rtinya$ jika tidak ada parameter yang diberikan pada konstruktornya$

    maka shell yang dibuat akan bertipe DialogShell. ika parameter konstruktornya berupa objek bertipe

    Display$ maka ia akan menjadi shell tingkat atas.

    Beberapa sifat #idget harus ditentukan pada saat #idget tersebut dibuat. Sifat #idget tersebut disebutbit gaya &style bit(. Bit gaya ini adalah konstanta yang didefinisikan dalam kelas SWT. Misalnya$

    Buttontombol =newButton(shell, bitGaya)

    Kita bisa menggunakan lebih dari satu gaya dengan menggunakan operator 8) atau |. Misalnya$ kita

    ingin membuat tombol yang bisa ditekan dan memiliki garis tepi$ kita bisa menggunakan SWT.PS!|

    SWT.B"#D$#sebagai parameter bit gayanya.

    Memulai SWT

    Untuk memulai pemrograman dengan SWT$ mari kita buat program sederhana yang kita namakan

    elloSWT.

    %nda membutuhkan 9link9 ke pustaka SWT. %da dua 'ara untuk melakukannya :

    -. Menggunakan pustaka SWT ba#aan dari ;'lipse. Untuk ini %nda tidak perlu mendo#nload

    apaapa. 5ustaka SWT ba#aan e'lipse terdapat pada direktori ;'lipse %nda$ misalnya padaWindo#s &!"#eclipse#plugins#o$g%eclipse%s&t%&in'(%&in'(%)*+,'%%.%/'0c%1a$ ( atau pada

    *inu< &eclise2plugins2o$g%eclipse%s&t%gtk%linu)%)*+,'%%.%/'3(b%1a$ (

    2. Menggunakan pustaka SWT beserta sumber kodenya untuk dokumentasi lebih lengkap. 5ustaka

    SWT ini bisa diunduh pada alamat berikut : http:==###.e'lipse.org=s#t=. 5ilih )eleases >Stable > &platform %nda$ misalnya Windos atau *inu 6e& > 7a/a P$o1ect$ kemudian isi 5roje't 6ame

    dengan elloSWT dan 'li'k 6e)t

    http://www.eclipse.org/swt/http://www.eclipse.org/swt/
  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    3/39

    Kita harus menambahkan pustaka SWT ke dalam proyek kita%

    1. ika %nda menggunakan SWT ba#aan ;'lipse seperti di atas$ pilih halaman 8ib$a$ies. Klik

    Add E)te$nal 7A9$ kemudian na!igasi ke direktori plugin di dalam instalasi ;'lipse %nda.

    Misalnya di komputer saya$ direktori itu berada di !"#eclipse#plugins. 5ilih %) untuk SWTpada direktori tersebut. 6amanya tergantung dari sistem operasi %nda$ misalnya pada Windo#s

    file ini bernama org.e%lipse.s&t.&in'.&in'.*+'.-../'--0%. Klik :; setelah file

    ini ditambahkan di dalam folder *ibraries.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    4/39

    -. ika %nda mengunduh proyek SWT$ pilih halaman P$o1ects. Klik Add$ kemudian tambahkan

    org.e'lipse.s#t. Kemudian klik 8K setelah proyek ini ditambahkan.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    5/39

    @older proyek baru akan dibuat$ seperti pada gambar berikut.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    6/39

    Kemudian klik kananpada folder sr'$ dan pilih 6e& > !lass. Isi nama kelas dengan

    elloSWT$ nama pa'kage dengan 5ellos&t$ dan tik 9publi' stati' !oid main&StringA args(9untuk membuat metode main()se'ara otomatis.

    Ketik kode berikut ini di dalam metode main()

    Display 1isplay =newDisplay()2

    Shell shell =newShell(1isplay)2 shell.set3ayout(new#o&3ayout())2 3abellabel =new3abel(shell, SWT.4"4$)2 label.setTet(5!ello, Worl165)2

    shell.pa%7()2 shell.open()2

    while(6shell.isDispose1()) if(61isplay.rea18n1Dispat%h()) 1isplay.sleep()2

    1isplay.1ispose()2

    label.1ispose()2

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    7/39

    5erhatikan bah#a Display$ Shell$ #o&3ayoutdan 3abeldiberi tanda merah sebagai tanda

    bah#a kesalahan program terjadi.

    Sekarang pindahkan mouse %nda pada kesalahan pada kelas Display. ;'lipse akan memberi

    tahu %nda kesalahan apa yang terjadi. 5ada 'ontoh ini$ kelas CDisplayC belum diketahui oleh

    ;'lipse. Klik pada pilihan Impo$t o$g%eclipse%s&t%&idgets?. *ihat sekarang di a#al

    program %nda ;'lipse menambahkan importorg.e%lipse.s&t.&i1gets.Display2se'araotomatis.

    *akukan hal yang sama pada semua kesalahan$ yaitu Shell$ 3abel$ #o&3ayoutdan SWT.4"4$$

    sehingga tidak ada lagi kesalahan yang dilaporkan oleh ;'lipse.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    8/39

    Untuk menjalankan program %nda$ klik tombol 9un seperti pada gambar berikut.

    Berikut ini adalah tampilan program SWT pertama %nda.

    Mengkompilasi dan Membuat P$og$am SWT Be$1alan di 8ua$ Eclipse

    Untuk bisa membuat program kita berguna untuk orang lain$ kita harus bisa mengkompilasi dan

    membuat program tersebut sebagai satu 9paket9. 5roses ini disebut menyebarkan &deploy(. 5ada

    ;'lipse$ program yang telah kita buat bisa kita deploy dalam format %) &a!a %r'hi!e($ yang

    menggabungkan semua file kelas yang sudah dikompilasi beserta pustaka yang dibutuhkan untuk bisamenjalankan program tersebut.

    Mari kita lihat 'ontoh program elloSWT yang sudah dibahas sebelumnya. Untuk mendeploy

    program ini sehingga bisa dijalankan di luar ;'lipse$ lakukan langkahlangkah berikut :

    ;lik kananpada nama proyek %nda$ kemudian pilih E)po$t. Setelah itu kotak dialog akan

    terbuka. Kemudian pilih 9unnable 7A9 4iledari dalam folder 7a/a.

    5ilih elloSWT - elloSWTpada 8aunc5 con@igu$ationdan juga masukkan di mana file

    %) hasilnya akan ditempatkan. ika nama direktori tidak diberikan$ ;'lipse akan meletakkan

    file %) tersebut pada direktori di mana #orkspa'e berada$ yaitu di mana data proyek

    ditempatkan. &Misalnya$ di komputer saya proyek 3elloSWT berada pada direktori+:Dbelajarja!a.lyra''.'omD3elloSWT$ maka file %) tersebut akan diletakkan pada direktori

    +:Dbelajarja!a.lyra''.'omD(

    http://java.lyracc.com/belajar/java-untuk-pemula/memulai-swthttp://java.lyracc.com/belajar/java-untuk-pemula/memulai-swt
  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    9/39

    Klik 4inis5$ kemudian :; untuk setiap pertanyaan yang mungkin mun'ul berikutnya.

    Sekarang$ gunakan Windo#s ;

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    10/39

    Meli5at 8ebi5 =ekat elloSWT

    Se'ara umum aplikasi SWT membutuhkan beberapa langkah sebagai berikut :

    1. Buat Display baru2. Buat satu atau lebih Shell3. Buat manager layout untuk Shell baru4. Buat widget di dalam shell5. Buka jendela shell6. Buat perulangan pengirim eent!. Buang "dispose# display dan widget$widget lainnya%. &entunya import berbagai paket yang diperlukan oleh program

    packagehellos&t2

    importorg.e%lipse.s&t.SWT2importorg.e%lipse.s&t.layout.#o&3ayout2importorg.e%lipse.s&t.&i1gets.Display2importorg.e%lipse.s&t.&i1gets.3abel2

    importorg.e%lipse.s&t.&i1gets.Shell2

    publicclass!elloSWT 9

    /** * @param args */ publicstaticvoidmain(String:;args)9 Display 1isplay =newDisplay()2 Shell shell =newShell(1isplay)2 shell.set3ayout(new#o&3ayout())2 3abellabel =new3abel(shell, SWT.4"4$)2 label.setTet(5!ello, Worl165)2 shell.pa%7()2

    shell.open()2 while(6shell.isDispose1()) if(61isplay.rea18n1Dispat%h()) 1isplay.sleep()2

    1isplay.1ispose()2

    label.1ispose()2

    ouseDo&ntidak akan menyebabkan tombol terlihat seperti ditekan. ,an juga memanggil

    notiy3isteners()tidak menjamin bah#a semua data pada e!ent terinisialisasi seperti pada e!ent

    sesungguhnya.

    8istene$ Be$tipe >untuk menangani E/ent be$tipe?

    Karena e!ent bertipe dibuat mengikuti pola listener pada a!aBeans$ penggunaan listener bertipe sangatmirip dengan penggunaan listener pada %WT=S#ing.

    Misalnya untuk mendengarkan e!ent ketika suatu #idget dihapus$ maka aplikasi bisa menggunakan

    a11Dispose3istener()$ yang memiliki bentuk seperti

    a11Dispose3istener(Dispose3istener listener)

    Metode ini menambahkan listener ke dalam koleksi listener yang akan dipanggil ketike suatu #idgetdihapus. Ketika suatu #idget dihapus$ maka listener akan dipanggil dengan memanggil metode

    &i1getDispose1().

    5otongan kode berikut digunakan untuk menangani e!ent ketika suatu #idget dihapus.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    21/39

    &i1get.a11Dispose3istener(newDispose3istener()9 publicvoid&i1getDispose1(Dispose$/ent e/ent)9 // widget was disposed as7untuk

    menunjukkan keadaan mouse. Seperti pada penanda tombol$ state>as7berisi keadaan mousesebelum terjadinya suatu e!ent. Misalnya$ jika tidak ada tombol mouse yang ditekan atau

    tombol keyboard lain yang ditekan ketika tombol kiri mouse ditekan$ maka e!ent mouse akan

    diisi dengan buttonbernilai - dan state>as7bernilai 0. state>as7tidak berisi 9tombol -9.

    %kan tetapi ketika terjadi e!ent lain ketika mouse kiri sedang ditekan$ maka state>as7akan

    berisi -.

    Keadaan suatu mouse dilambangkan oleh konstanta pada kelas SWT$ seperti pada tabel

    berikut :

    stateMask Pen1elasan

    SWT.BUTT86- Tombol - ditekan

    SWT.BUTT861 Tombol 1 ditekanSWT.BUTT86 Tombol ditekan

    SWT.BUTT86M%SK Bit#ise8) dari tomboltombol yang ditekan

    Berikut ini adalah e!ent pada mouse yang disediakan oleh SWT. Seperti disebutkan pada

    bagian sebelumnya$ e!ent dan listener SWT terdiri dari e!ent=listener tanpa tipe dan

    e!ent=listener bertipe. Keduanya disarikan dalam tabel berikut :

    ;elas E/ent

    >e/ent

    Inte$@ace2;elas

    8istene$&listenerMetode >listene$ be$tipe? 7enis e/ent >e/ent

    tanpa tipe(Pen1elasan

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    24/39

    be$tipe? bertipe(

    Mouse;!ent

    Mouse*istener &dan

    Mouse%dapter(

    mouse,ouble+li'k&Mouse;!en

    t(

    SWT.Mouse,ouble+li'

    k

    Mouse di

    double'li'k

    mouse,o#n&Mouse;!ent( SWT.Mouse,o#n

    Tombol

    mouseditekan

    mouseUp&Mouse;!ent( SWT.MouseUp

    Tombol

    mouse

    dilepaskan

    Mouse;!ent MouseMo!e*istener mouseMo!e&Mouse;!ent( SWT.MouseMo!e

    Mouse

    berpindahposisi

    Mouse;!ent

    MouseTra'k*istener&dan

    MouseTra'k%dapter

    (

    mouse;nter&Mouse;!ent( SWT.Mouse;nter

    Mouse

    masuk ke

    #ilayahklien

    mouse;ouse 9

    /**

    * @param args

    */

    publicstaticvoidmain(String:;args)9

    // Membuat display dan shell baru

    Display 1isplay =newDisplay()2

    Shell shell =newShell(1isplay)2

    // Kelas Listener baru, menggunakan listener tanpa tipe

    3istener mouse3istener =new3istener()9

    // metode handleEvent pada interface Listener harus

    diimplementasikan

    http://java.lyracc.com/sites/java.lyracc.com/files/pelacakmouse.ziphttp://java.lyracc.com/sites/java.lyracc.com/files/pelacakmouse.zip
  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    25/39

    publicvoidhan1le$/ent($/ente)9

    Stringoutput =544"W452

    switch(e.type)9

    caseSWT.>ouseDo&nFoutput =5D"W452break2

    caseSWT.>ousepFoutput =5P52break2

    caseSWT.>ouse>o/eFoutput =5>"@$52break2

    caseSWT.>ouseDoubleCli%7F

    output =5D"B3$52

    break2

    caseSWT.>ouse$nterFoutput=5$4T$#52break2

    caseSWT.>ouse$itFoutput =5$H?T52break2

    caseSWT.>ouse!o/erFoutput=5!"@$#52break2

    as7=5

    I?nteger.to!eString(e.state>as7)2

    // Jika tombol Ctrl ditekan, tambahkan C!L pada keluarannya

    if((e.state>as7ASWT.CT#3)6=)

    output I=5 CT#352

    // Jika tombol "lt ditekan, tambahkan "L pada keluarannya

    if((e.state>as7ASWT.83T)6=)

    output I=5 83T52

    // Jika tombol #hift ditekan, tambahkan #$%& pada

    keluarannya

    if((e.state>as7ASWT.S!?T)6=)

    output I=5 S!?T52

    // Jika tombol Command ditekan, tambahkan C'MM"() pada

    keluarannya

    if((e.state>as7ASWT.C">>84D)6=)

    output I=5 C">>84D52

    // Jika tombol kiri mouse ditekan, tambahkan *+'( pada

    keluarannya

    if((e.state>as7ASWT.BTT"4)6=)

    output I=5 BTT"452

    // Jika tombol tengah mouse ditekan, tambahkan *+'(- padakeluarannya

    if((e.state>as7ASWT.BTT"4)6=)

    output I=5 BTT"452

    // Jika tombol kanan mouse ditekan, tambahkan *+'(. pada

    keluarannya

    if((e.state>as7ASWT.BTT"4')6=)

    output I=5 BTT"4'52

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    26/39

    // Mengambil field button pada event, kemudian

    menampilkannya

    // dalam bentuk heksadesimal

    output I=5, button=5

    I?nteger.to!eString(e.button)2

    // Mengambil koordinat dan y

    output I=5, =5Ie.I5, y=5Ie.y2

    // Menampilkan pesan keluaran pada konsol

    System.out.println(output)2

    ousep, mouse3istener)2

    shell.a113istener(SWT.>ouse>o/e, mouse3istener)2

    shell.a113istener(SWT.>ouseDoubleCli%7, mouse3istener)2

    shell.a113istener(SWT.>ouse$nter, mouse3istener)2

    shell.a113istener(SWT.>ouse$it, mouse3istener)2

    shell.a113istener(SWT.>ouse!o/er, mouse3istener)2

    // +bah ukuran 0endela men0adi -11 -11 piksel

    shell.setSiJe(, )2

    // 2erintah 3standar3 #4, harus ada pada setiap aplikasi #4

    shell.open()2

    while(6shell.isDispose1())

    if(61isplay.rea18n1Dispat%h()) 1isplay.sleep()2

    1isplay.1ispose()2

    e/ent be$tipe?

    Inte$@ace2;elas

    8istene$>listene$

    be$tipe?

    Metode >listene$ be$tipe?7enis e/ent >e/ent

    tanpa tipe(Pen1elasan

    @o'us;!ent@o'us*istener &dan

    @o'us%dapter(

    fo'usGained&@o'us;!ent( SWT.@o'usIn

    Widget menerima

    fokus dari

    keyboard

    fo'us*ost&@o'us;!ent( SWT.@o'us8utWidgetkehilangan fokus

    dari keyboard

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    29/39

    Mari kita lihat 'ontoh berikut ini untuk memahami lebih lanjut tentang fokus input. Kita akan buat 1

    #idget yang berupa input teks. Ketika input teks atas menerima fokus$ maka judul aplikasi kita ganti

    dengan 9@okus pada input teks atas9. Ketika input teks ba#ah menerima fokus$ maka judul aplikasi kita

    ganti dengan 9@okus pada input teks ba#ah9. ika input teks atas kehilangan fokus$ kita isi input teksyang kehilangan fokus dengan 9Saya kehilangan fokus9$ begitu input teks atas menerima fokus

    kembali$ kita akan hapus kalimat tersebut.

    +ontoh program ini dapat %nda unduh di sini$ untuk diimport pada ;'lipse. 5embahasan detail tentang

    'ontoh program ini akan dibahas kemudian.

    E/ent pada Tombol

    Ketika suatu tombol pada keyboard ditekan$ e!ent tombol akan dibuat dan diberikan kepada aplikasikita. %kan tetapi$ tergantung pada platformnya$ kedaerahan &lo'ale($ dan kombinasi tombol$ ada

    kalanya e!ent tidak terjadi. Misalnya$ pada karakter ;ropa yang memiliki aksen$ mesin pengolah

    karakter dari sistem operasi akan mengambil tombol tersebut untuk diolah. Misalnya pada kedaerahanerman jika karakter J ditekan kemudian diikuti dengan tombol e$ maka karakter akan ditampilkan.

    ,emikian juga jika tombol bantu ditekan untuk mengolah bahasa epang$ IM; akan mengolah urutan

    karakter menjadi karakter Kanji.

    ,engan kata lain$ e!ent tingkat rendah seperti ini sangat bergantung pada platform dan sistem operasi$

    sehingga tidak terlalu berguna untuk kebanyakan program. SWT menyembunyikan e!ent sistemoperasi dan hanya menampilkan satu e!ent tombol saja setelah sistem operasi selesai mengolah tombol

    tersebut.

    Berikut ini adalah daftar e!ent dan listener yang berkaitan dengan tombol.

    ;elas E/ent

    >e/ent be$tipe?

    Inte$@ace2;elas

    8istene$>listene$

    be$tipe?

    Metode >listene$

    be$tipe?

    7enis e/ent >e/ent

    tanpa tipe(Pen1elasan

    Key;!ent Key*istener &danKey%dapter(

    key5ressed&Key;!ent( SWT.Key,o#nTombol

    ditekan

    key)eleased&key;!ent( SWT.KeyUpTombol

    dilepaskan

    ;!ent SWT.Key,o#n dan SWT.KeyUp merupakan representasi tingkat tinggi dari tombol yang

    ditekan dan dilepaskan. ;!ente!ent ini berguna jika kita ingin men'egat suatu tombol tertentu dan

    melakukan aksi khusus ketika tombol itu ditekan.

    Berikut ini adalah isi e!ent keyboard ketika ditekan=dilepaskan.

    http://java.lyracc.com/sites/java.lyracc.com/files/demofokus.ziphttp://java.lyracc.com/sites/java.lyracc.com/files/demofokus.zip
  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    30/39

    6ama 4ield Pen1elasan

    'hara'ter 6ilai Uni'ode dari karakter yang ditekan

    key+ode Konstanta yang menunjukkan tombol mana yang ditekan$ misalnya SWT.5%G;U5

    stateMask Melambangkan tombol tambahan$ misalnya SWT.S3I@T

    doit Suatu boolean yang bisa digunakan untuk membatalkan aksi penekanan tombol

    %hara%terberisi karakter yang kita masukkan le#at keyboard setelah diolah oleh sistem operasi.

    Misalnya jika kita menekan tombol La> maka %hara%terberisi CaC. ika tombol LShift> dan La>

    ditekan$ maka %hara%terberisi C%C. ika tombol L+trl> dan La> ditekan$ maka %hara%terakan diisi

    karakter yang bersesuaian dengan +trla$ yaitu karakter dengan kode Uni'ode CDu000-C &atau S83(.

    Beberapa tombol seperti ;nter$ Ba'kspa'e$ Tab$ memiliki kode karakter Uni'ode tersendiri. SWT jugamemiliki konstanta untuk me#akili tomboltombol ini$ yaitu

    ;onstanta c5a$acte$ Pen1elasan

    SWT.BS Tombol ba'kspa'e

    SWT.+) Tombol ;nter

    SWT.,;* Tombol ,el

    SWT.;S+ Tombol ;s'

    SWT.*@ Tombol *@

    SWT.T%B Tombol Tab

    7eyCo1eberisi karakter yang tidak bisa di#akilkan dengan karakter Uni'ode$ misalnya tombol L@->$

    tombol L5gUp>$ tombol L5anah %tas>$ dan lainlain termasuk tombol angka pada keypad dan tombol

    L> L> LN> pada keypad. Beberapa tombol tersebut dilambangkan dalam konstanta sebagai berikut.

    Khusus untuk keypad$ apabila tombol L> ditekan$ maka selain 7eyCo1eberisiSWT.K;75%,,%,,$ %hara%terjuga berisi CC.

    SWT.@- SWT.@-- SWT.5%G;,8W6SWT.K;75%,

    0

    SWT.K;75%,;OU%

    *

    SWT.@1 SWT.@-1 SWT.38M;SWT.K;75%,

    -SWT.K;75%,+)

    SWT.@ SWT.@- SWT.;6,SWT.K;75%,

    1SWT.3;*5

    SWT.@/ SWT.@-/ SWT.I6S;)TSWT.K;75%, SWT.+%5S*8+K

    SWT.@2 [email protected];75%,MU*TI5*

    7

    SWT.K;75%,

    /SWT.6UM*8+K

    SWT.@P SWT.%))8WU5 SWT.K;75%,%,,SWT.K;75%,2

    SWT.S+)8***8+K

    SWT.@QSWT.%))8W,8W6

    SWT.K;75%,SUBT)%+T

    SWT.K;75%,P

    SWT.5%US;

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    31/39

    SWT.@R SWT.%))8W*;@TSWT.K;75%,,;+IM%

    *

    SWT.K;75%,

    QSWT.B);%K

    SWT.@SWT.%))8W)IG3T

    SWT.K;75%,,I4I,;SWT.K;75%,R

    SWT.5)I6TS+);;6

    [email protected]%G;U5 SWT.K;75%,0SWT.K;75%,

    state>as7berisi tombol sebelum tombol ditekan$ yang biasanya L+trl>$ LShift>$ L%lt>$

    L+ommand>. 5ada kebanyakan keyboard hanya ada tombol pertama$ akan tetapi ada juga yang

    memiliki lebih dari tombol. Tomboltombol ini disebut tombol pengubah.

    SWT membuat tomboltombol ini menjadi kode seperti

    stateMask Pen1elasan

    SWT.M8,-Tombol pengubah pertama ditekan &biasanya SWT.+86T)8* pada

    Windo#s atau SWT.+8MM%6, pada Ma'intosh(

    SWT.M8,1 Tombol pengubah kedua ditekan &biasanya SWT.S3I@T(

    SWT.M8, Tombol pengubah ketiga ditekan &biasanya SWT.%*T(

    SWT.M8,/ Tombol pengubah keempat ditekan &biasanya 0(

    SWT.M8,I@I;)M%SK Gabungan dari keempatnya &menggunakan bit#ise 8)(

    ,engan representasi seperti ini$ maka SWT bisa dijalankan pada beberapa platform$ dan tidak

    bergantung dengan tombol apa yang ada pada suatu sistem operasi. Bayangkan jika %nda inginmenggunakan L+ontrol> Lb> untuk membuat karakter menjadi tebal$ akan tetapi tombol L+ontrol>

    tidak tersedia pada Ma'intosh.

    Untuk menguji tombol pengubah mana yang ditekan$ kita bisa menggunakan bit#ise %6,$ misalnya(e.state>as7ASWT.S!?T).

    Berikut ini adalah 'ontoh program pela'ak keyboard yang akan melaporkan tombol apa yang %nda

    tekan dan lepaskan. +ontoh program ini dapat %ndaunduh di siniuntuk mengimportnya ke dalam

    ;'lipse. alankan program ini pada ;'lipse$ kemudian ketik apa saja di program %nda$ perhatikan

    9+onsole9 di ;'lipse akan penuh dengan berbagai laporan tentang tombol yang ditekan dan dilepaskan.

    http://java.lyracc.com/sites/java.lyracc.com/files/pelacakkeyboard.ziphttp://java.lyracc.com/sites/java.lyracc.com/files/pelacakkeyboard.ziphttp://java.lyracc.com/sites/java.lyracc.com/files/pelacakkeyboard.ziphttp://java.lyracc.com/sites/java.lyracc.com/files/pelacakkeyboard.zip
  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    32/39

    Kadang kala dalam kondisi yang sangat langka$ kita harus mengolah sendiri tombol kita sebelum

    diolah oleh suatu #udget. Karena SWT menggunakan #idget ba#aan sistem operasi$ pengolahantombol terjadi di le!el sistem operasi. Misalnya$ ketika user mengetik pada #idget teks$ listener

    SWT.Key,o#n akan dijalankan$ kemudian sistem operasi akan memasukkan karakter dan

    menggambarnya kembali dijalankan oleh sistem operasi. ,engan menggunakan 1oit$ kita bisa

    membuang karakter tersebut untuk tidak meneruskannya ke sistem operasi.

    +ontoh berikut akan menghalangi user untuk memasukkan karakter pada #idget teks dengan mengeset

    1oitmenjadi falsesetiap kali e!ent SWT.Key,o#n terjadi.

    package%om.lyra%%.penghalangtombol2

    importorg.e%lipse.s&t.2importorg.e%lipse.s&t.&i1gets.2publicclassPenghalangTombol 9

    /** * @param args */ publicstaticvoidmain(String:;args)9 Display 1isplay =newDisplay()2 Shell shell =newShell(1isplay)2 Tet tet =newTet(shell, SWT.S?4G3$|SWT.B"#D$#)2

    tet.a113istener(SWT.eyDo&n, new3istener()9 publicvoidhan1le$/ent($/ente/ent)9 e/ent.1oit=false2 LTab> fokus akanberpindah ke tombol sebelumnya. %kan tetapi jika %nda sampai pada tombol / atau tombol P$ e!ent

    tra!ersal yang terjadi akan ditangkap dan tra!ersal akan diabaikan. %kibatnya %nda tidak akan bisa

    pindah dari tombol / ke tombol atau tombol P ke tombol 2. 5ada saat yang sama di konsol akanter'etak 9%nda tidak bisa kembaliE9.

    package%om.lyra%%.tra/ersal7ustom2importorg.e%lipse.s&t.2importorg.e%lipse.s&t.&i1gets.2importorg.e%lipse.s&t.e/ents.2publicclassTra/ersalustom 9

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    37/39

    /** * @param args */ publicstaticvoidmain(String:;args)9 Display 1isplay =newDisplay()2 Shell shell =newShell(1isplay)2 shell.setSiJe(', )2

    Buttonb =newButton(shell, SWT.PS!)2 Buttonb =newButton(shell, SWT.PS!)2 Buttonb' =newButton(shell, SWT.PS!)2 Buttonb- =newButton(shell, SWT.PS!)2 ButtonbK =newButton(shell, SWT.PS!)2 Buttonb+ =newButton(shell, SWT.PS!)2 b.setBoun1s(,,K,K)2 b.setBoun1s(,,K,K)2

    b'.setBoun1s(,,K,K)2 b-.setBoun1s(,,K,K)2

    bK.setBoun1s(,,K,K)2 b+.setBoun1s(,,K,K)2

    b.setTet(55)2

    b.setTet(55)2 b'.setTet(5'5)2 b-.setTet(5-5)2

    bK.setTet(5K5)2 b+.setTet(5+5)2

    Tra/erse3istener tra/erse3istener =newTra/erse3istener()9 publicvoid7eyTra/erse1(Tra/erse$/ent e)9 if(e.1etail==SWT.T#8@$#S$T8BP#$@?"S)9 System.out.println(58n1a ti1a7 bisa 7embali65)2 e.1oit=false2 < System.out.println(e.&i1getI5 1itelusuri5)2

    membuka konsol kesalahan &error

    'onsole(.

  • 7/22/2019 Java 12 Pengenalan GUI Dengan Eclipse SWT

    38/39

    %kselerator selalu berhubungan dengan menu$ sehingga akselerator bersifat global$ yang berarti kita

    bisa menekan tombol akselerator dari dalam #idget manapun yang sedang aktif pada saat itu. Ketika

    akselerator dipanggil$ maka tomboltombol yang ditekan akan dikonsumsi langsung oleh aplikasi dan

    tidak diberikan kepada #idget apaapa.

    %kselerator direpresentasikan pada SWT dalam bentuk kode integer tertentu. Kode integer tersebut

    berisi gabungan beberapa tombol$ yaitu tombol pengubah &seperti L+trl>$ LShift>$ L%lt>( dan satutombol lain yang berupa karakter atau key+ode &seperti tanda panah$ @- hingga @-2$ L;s'>$ dll(. *ihatbahasan tentang fokus kontroluntuk mengerti lebih jauh tentang bagaimana penanganan tombol pada

    SWT. Tombol akselerator tidak bisa hanya terdiri dari tombol pengubah saja.

    Berikut ini adalah beberapa 'ontoh akselerator.

    Aksele$ato$ 9angkaian Tombol

    SWT.+86T)8* C%C L+trl> L%>

    SWT.S3I@T SWT.%))8WU5 LShift> tombol panah ke atas

    SWT.M8,- CSC Tombol pengubah pertama &biasanya L+trl> atau L+ommand>( LS>

    SWT.M8,- SWT.M8,1 CBC Tombol pengubah pertama Tombol pengubah kedua LB>

    %kselerator diberikan kepada menu atau toolbar dengan menggunakan metode set8%%elerator(int

    7o1e87selerator)di mana 7o1e87seleratoradalah kode akselerator seperti di'ontohkan pada tabel

    di atas. Untuk mereset akselerator$ isi 7o1e87seleratordengan 0.

    Untuk mengambil tombol akselerator suatu menu atau toolbar bisa digunakan dengan menggunakan

    metode get8%%elerator()yang mengembalikan nilai integer.

    Misalnya jika itemadalah suatu item pada menu$ maka potongan kode berikut akan menambahkan

    akselerator pada item tersebut :

    item.setTet(5Pilih ASemua\tCtrlIS5)2item.set8%%elerator(SWT.>"DILSL)2

    item.a113istener(SWT.Sele%tion, new3istener()9 publicvoidhan1le$/ent($/ente)9 System.out.println(5?tem 1ipilih.5)2