Minggu, 02 Maret 2014

Bit Gaya Shell

Shell memiliki beberapa bit gaya yang dibagi menjadi 3 jenis, sebagai berikut. Akan tetapi perlu diingat bahwa bit gaya untuk shell hanya digunakan sebagai bantuan saja. Apa yang digambar oleh manager jendela setiap sistem operasi bisa berbeda-beda.
1. Gaya yang mempengaruhi tampilan, suatu jendela bisa memiliki satu atau beberapa bit gaya berikut
  • SWT.BORDER, suatu jendela memiliki garis tepi di sekitarnya
  • SWT.NO_TRIM, suatu jendela tanpa garis tepi (bisa digunakan untuk tool tip), akan tetapi tidak bisa digabungkan dengan SWT.BORDER
  • SWT.CLOSE, suatu jendela memiliki tombol Close (atau biasanya sering digambar dengan X) di pojok kanan atas jendela
  • SWT.MIN, suatu jendela memiliki tombol Minimize (biasanya sering digambar dengan -) di pojok kanan atas jendela
  • SWT.MAX, suatu jendela memiliki tombol Maximimze di pojok kanan atas jendela
  • SWT.RESIZE, suatu jendela memiliki tombol Resize di pojok kanan atas jendela
  • SWT.TITLE, suatu jendela memiliki judul.
  • SWT.ON_TOP, suatu jendela yang akan berada di atas jendela-jendela lain bahkan jendela dari aplikasi lain. Jendela ini tidak memblok input ke jendela lain, artinya hanya tampilannya saja yang berada paling atas. Bisa digunakan untuk menampilkan logo pada saat program pertama kali dijalankan.
  • SWT.TOOL, suatu jendela yang berbentuk seperti tips sesaat yang tujuannya memberikan bantuan kepada user. Dalam Eclipse, biasanya toop tips ini muncul ketika kita mengarahkan mouse ke suatu perintah, kemudian berhenti sesaat di sana. Kemudian akan muncul bantuan tentang suatu perintah tersebut, yang menjelaskan di antaranya input dan output suatu metode dan komentar bagaimana menggunakan suatu metode.
2. Bit gaya yang mempengaruhi modalitas suatu jendela
Modalitas adalah bagaimana suatu jendela mempertahankan fokus input pada dirinya dan memblokade input ke jendela lain. Modalitas suatu jendela tergantung pada siapa yang bisa diblokade inputnya. Hanya salah satu modalitas saja yang bisa diberikan kepada suatu jendela
  • SWT.MODELESS, suatu jendela tidak memblok jendela lain, biasanya merupakan default dari suatu jendela shell tingkat atas yang baru dibuat
  • SWT.PRIMARY_MODAL, suatu jendela memblok input induknya, biasanya digunakan untuk kotak dialog
  • SWT.APPLICATION_MODAL, suatu jendela memblok input jendela-jendela lain pada aplikasi yang sama
  • SWT.SYSTEM_MODAL, suatu jendela memblok seluruh jendela bahkan jendela aplikasi lain.
3. Bit gaya untuk kenyamanan pemrograman
SWT memberikan beberapa bit gaya yang bisa digunakan seorang programmer yang merupakan gabungan dari beberapa bit gaya di atas, yang merupakan kombinasi yang sering digunakan dalam aplikasi. Oleh karena itu bit gaya ini digunakan untuk kenyamanan programmer akan tetapi memiliki efek yang persis sama dengan apabila kita menggabungkannya sendiri
  • SWT.SHELL_TRIM, merupakan gaya shell yang biasa digunakan untuk jendela suatu aplikasi. Merupakan gabungan dari (SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE)
  • SWT.DIALOG_TRIM, merupakan gaya shell yang biasa digunakan untuk kotak dialog. Merupakan gabungan dari (SWT.CLOSE | SWT.TITLE | SWT.BORDER)
Untuk melihat efek dari beberapa bit gaya di atas, lakukan ekspremen kecil pada program berikut :
package com.lyracc.contohshell;
 
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
 
public class ContohShell {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display, SWT.CLOSE | SWT.BORDER);
 
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch()) 
                display.sleep();
        display.dispose();        
    }
}
Anda bisa mengganti-ganti kontruktor shell dengan beberapa kombinasi berikut dan lihat hasilnya sendiri :
  • Shell shell = new Shell(display, SWT.SHELL_TRIM)
  • Shell shell = new Shell(display, SWT.DIALOG_TRIM)
  • Shell shell = new Shell(display, SWT.TOOL)
  • Shell shell = new Shell(display, SWT.CLOSE | SWT.BORDER)
  • Shell shell = new Shell(display, SWT.NO_TRIM)
Beberapa contoh di atas tidak akan menampilkan tombol close, sehingga untuk mematikannya Anda harus menghentikannya dari dalam Eclipse dengan menekan tombol
Contoh berikut (kode lengkapnya untuk diimport ke dalam Eclipse bisa diunduh di sini) ini membuat shell kosong, jika mouse kita berhenti di suatu tempat (hover), shell baru yang berisi tool tip akan ditampilkan, seperti pada gambar berikut. Tool tip ini akan hilang jika mouse berpindah tempat.
Untuk membuatnya, kita akan membuat satu kelas yang khusus menangani event, yang kita namakan ToolTipListener. Kelas ini mengimplementasikan MouseMoveListener dan MouseTrackListener (lihat bagian penanganan mouse untuk apa apa listener digunakan). MouseTrackListener digunakan untuk menangkap event hover yang akan membuat shell baru, kemudian menambahkan label untuk menampilkan tulisan ToolTip. Shell baru ini kita buat dengan bit gaya SWT.TOOL. Berikut ini adalah listing dari kelas ToolTipListener.
package com.lyracc.tooltipdemo;
 
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;
 
public class ToolTipListener implements MouseTrackListener, MouseMoveListener {
 
    Shell tip = null;
    Label label = null;
 
    // Metode buatToolTip dipanggil oleh event hover
    void buatToolTip(MouseEvent e) {
        // Ambil display dan shell utama dari event
        Display displayUtama = e.display;
        Shell shellUtama = displayUtama.getActiveShell();
 
        // Buat tool tip baru sebagai shell, dengan bit gaya SWT.ON_TOP
        tip = new Shell(shellUtama, SWT.ON_TOP);
        tip.setLayout(new FillLayout());
 
        // Tambahkan label
        label = new Label(tip, SWT.NONE);
        label.setText("ToolTip");
 
        // Tambahkan tip ke dalam shell supaya bisa digambar
        tip.pack();
    }
 
    // Metode tutupToolTip dipanggil ketika mouse pindah
    void tutupToolTip() {
        if (tip != null) tip.dispose();
        tip = null;
    }
 
    @Override
    public void mouseEnter(MouseEvent e) {
    }
 
    @Override
    public void mouseExit(MouseEvent e) {
        // Jika mouse keluar dari shell, tutup tool tip
        tutupToolTip();
    }
 
    @Override
    public void mouseHover(MouseEvent e) {
        // Jika tip sudah ada, keluar dan tidak lakukan apa-apa
        if (tip != null) return;
 
        // Jika belum ada, buat tool tip baru
        buatToolTip(e);
 
        // Mengambil display dan shell utama dari event yang memanggil
        Display displayUtama = e.display;
        Shell shellUtama = displayUtama.getActiveShell();
 
        // Hitung di mana tool tip akan ditampilkan, diambil dari lokasi mouse
        // yang disimpan di dalam e.x dan e.y
        Rectangle rect = tip.getBounds();
        rect.x = e.x;
        rect.y = e.y + 22;
 
        // Ubah posisi tip menggunakan metode setbounds
        tip.setBounds(
                displayUtama.map(shellUtama, null, rect));
 
        // Buat supaya tip bisa dilihat (visible)
        tip.setVisible(true);
    }
 
    @Override
    public void mouseMove(MouseEvent e) {
        // Jika mouse pindah lokasi, tutup tool tip
        tutupToolTip();
    }
}
Kelas utamanya (yang memiliki metode main()) akan menginstansiasi kelas ToolTipListener dan menambahkan listener ke shell utamanya. Berikut ini adalah listing kelasnya.
package com.lyracc.tooltipdemo;
 
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
 
public class ToolTipDemo {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        final Display display = new Display();
        final Shell shell = new Shell(display);
 
        shell.setLayout(new FillLayout());
 
        // Membuat instansi listener baru
        ToolTipListener tipListener = new ToolTipListener();
 
        // Tambahkan listener ke dalam shell
        // (kelas listener kita mengimplementasi kelas MouseMoveListener
        // dan kelas MouseTrackListener, kita tambahkan listener tersebut
        // sendiri-sendiri)
        shell.addMouseMoveListener(tipListener);
        shell.addMouseTrackListener(tipListener);
 
        shell.pack();
 
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch()) 
                display.sleep();
        display.dispose();        
    }
}
 
Sumber :http://java.lyracc.com/belajar/java-untuk-pemula/bit-gaya-shell 

Tidak ada komentar:

Posting Komentar