Showing posts with label JAVA MOKLET. Show all posts
Showing posts with label JAVA MOKLET. Show all posts

3.5.12

APA Ya SWING makeover itu ? -,-

SwingMakeOver merupakan teknik memanipulasi tampilan User Interfaces (Java Swing). Teknik ini dilakukan dengan menggunakan penggambaran agar tampilan komponen-komponen Java Swing seperti TextField, Button dan lain-lain menjadi lebih cantik kelihatannya.




KELEBIHAN SWING X :
        SwingX  menawarkan fitur-fitur ekstra yang tidak ditemui di Swing secara siap jadi. Sebagai contoh, ada yang disebut sebagai Highlighter, untuk memberi highlight (bisa berupa warna background berbeda dan sebagainya) pada sel tertentu di JXTable, JXList, JXTree, dan sebagainya.
        Komponen yang diawali JX kebanyakan adalah turunan dari komponen Swing standar, misalnya JXTable adalah turunan dari JTable.  Demikian juga, JXComboBox adalah turunan dari JComboBox.  JXComboBox sudah mendukung fitur highlight dengan adanya fungsi addHighlighter().
        Jika kita ingin menampilkan nilai dibawah 50 dengan background merah di JXComboBox, kita dapat menggunakan ColorHighlighter.

SWING MAKE OVER

Makeover Regimen
> Mixing Swing & JavaFX
> Easy Eye Candy
> Styling with CSS
> 3D Illusion
> Finale


Mixing Swing & JavaFX
> Create JavaFX Stage
> Embed Swing components in scene
> Create listeners to wire JavaFX to Swing


Create JavaFX Stage
def STAGE_MIN_WIDTH = 845;
def STAGE_MIN_HEIGHT = 700;
def stage = Stage {
    style: StageStyle.TRANSPARENT
    scene: scene = Scene {
        width: STAGE_MIN_WIDTH
        height: STAGE_MIN_HEIGHT
        fill: null
        content: CaspianFrame {
             // scene contents....                              
        }
    }
}
// CaspianFrame is home-grown class implementing top-level
// window shape/decorations  (authored by Jasper Potts)


Embedding Swing Components
> Any Swing class can be embedded in scene
javafx.ext.swing.SwingComponent
> Can be treated like any node:
• opacity (!), rotate, scale, translate, etc
• Resizable and work with scene graph layout
> But treated as single node
• node transforms only on whole component
• cannot transform or animate component internals


Embedding Swing Components 
continued
> Can invoke Java/Swing apis from JavaFX script
def map = new HashMap();
var table = new JTable();
> Cannot use JavaFX script features on Components
• no binding to Java bean properties
> Can create JavaFX wrapper classes to help
• SDK provides wrappers for many Swing classes
javafx.ext.swing.*
> JavaFX strictly single-threaded
• non-gui thread execution must happen in Java code


Embed Swing Components in Scene
var body:Panel;
var toolbar:ToolBar;
var mailboxArea:BackDrop;
var messageListArea:RoundedPanel;
var messageArea:RoundedPanel;
var swingMessageList = new MessageListPanel(); // Swing class
var swingMessagePanel = new MessagePanel(); //Swing class
body = Panel {
    content: [
        toolbar = ToolBar { ... }                              
        mailboxArea = BackDrop { ... }
        messageListArea = RoundedPanel {
             node: SwingComponent.wrap(swingMessageList);
        }
        messageHeaderArea = BackDrop { ... }
        messageArea = RoundedPanel {
             node: SwingComponent.wrap(swingMessagePane);
        }
    ]
}



Create Listeners for Wiring JavaFX to Swing
class PropChangeListener extends PropertyChangeListener {  
    public var onPropChange:function(event:PropertyChangeEvent):Void;
    override function propertyChange(event:PropertyChangeEvent):Void {
        onPropChange(event);
    }
}
def pcl:PropChangeListener = PropChangeListener {
    onPropChange: function(event:PropertyChangeEvent):Void {
        if (event.getPropertyName().equals("selectedMessage")) {
              // handle property change in FX
        }
    }          
}
// add listener to Swing component
messageListPanel.addPropertyChangeListener(pcl);



8.3.12

Inner Class :D

inner class yang tanpa nama. Kegunaan dari anonymousinner class
akan menyederhanakan kode-kode Anda lebih lanjut.
Di bawah ini merupakan modifikasi beberapa bagian
Kelas DataStructure di bawah ini terdiri dari:
* Kelas DataStructure luar, yang meliputi metode untuk menambahkan sebuah integer ke array dan mencetak nilai-nilai bahkan indeks array.
* Kelas InnerEvenIterator batin, yang mirip dengan iterator Java standar. Iterators digunakan untuk langkah melalui struktur data dan biasanya memiliki metode untuk menguji elemen terakhir, mengambil elemen saat ini, dan pindah ke elemen berikutnya.
* Metode utama yang instantiates objek DataStructure (ds) dan menggunakannya untuk mengisi array arrayOfInts dengan nilai integer (0, 1, 2, 3, dll), kemudian memanggil metode printEven untuk mencetak nilai-nilai indeks bahkan arrayOfInts .
———————————————–
public class DataStructure {
/ / Buat array
private final static int SIZE 15 =;
int pribadi [] arrayOfInts = new int [UKURAN];
publik DataStructure () {
/ / Mengisi array dengan nilai integer ascending
for (int i = 0; i <SIZE; i + +) {
arrayOfInts [i] = i;
}
}
public void printEven () {
/ / Mencetak nilai-nilai bahkan indeks dari array
InnerEvenIterator iterator = this.new InnerEvenIterator ();
sedangkan (iterator.hasNext ()) {
System.out.println (iterator.getNext () + “”);
}
}
/ / Kelas dalam menerapkan pola Iterator
swasta kelas InnerEvenIterator {
/ / Mulai melangkah melalui array dari awal
int swasta berikutnya = 0;

public boolean hasNext () {
/ / Memeriksa apakah elemen saat ini adalah yang terakhir dalam array
return (<next = SIZE – 1);
}
public int getNext () {
/ / Merekam nilai indeks bahkan dari array
retValue int = arrayOfInts [berikutnya];
/ / Mendapatkan elemen bahkan berikutnya
berikutnya + = 2;
kembali retValue;
}
}
public static void main (String s []) {
/ / Mengisi array dengan nilai integer dan mencetak nilai-nilai hanya dari indeks bahkan
ds DataStructure DataStructure = new ();
ds.printEven ();
}
}
source : http://cantony.wordpress.com/2011/04/17/kelas-iner/

Event Handling GUI pada Java

Dalam event handling pada Java ada empat bagian penting yang harus diketahui:
  1. Event Object merupakan object yang mendiskripsikan sebuah event yang di-trigger oleh event source.
  2. Event Handler merupakan method yang menerima event object dan melakukan respond yang sesuai dengan event object tersebut.
  3. Event Listener merupakan interface yang akan meng-handle event yang terjadi. setiap type event mempunyai interface yang bersesuaian. Listener tersebut harus diimplementasikan oleh class yang akan meng-handle event
  4. Event Source merupakan pembangkit / trigger sebuah event objects
setiap event object mempunyai  type event yang berbdea beda. sehingga kita harus menentukan type event sebelum menentukan jenis interface listener. karena setiap type event mempunyai jenis interface listener yang bersesuaian.
berikut ini type type event yang ada di Java :
  1. ActionEvent
  2. ItemEvent
  3. WindowEvent
  4. ContainerEvent
  5. ComponentEvent
  6. FocusEvent
  7. TextEvent
  8. KeyEvent
  9. MouseEvent
  10. AdjustmentEvent
Berikut ini Interface Listener
  1. ActionListener
  2. ItemListener
  3. WindowListener
  4. ContainerListener
  5. ComponentListener
  6. FocusListener
  7. TextListener
  8. KeyListener
  9. MouseListener
  10. MouseMotionListener
  11. AdjustmentListener
Berdasarkan tulisan diatas, setiap type event mempunyai satu jenis interface listener kecuali MouseEvent yang mempunyai dua jenis interface listener. dan setiap interface mempunyai method abstract yang harus di override class yang meng-impletasikan interface. event listener dan event handler terdapat pada package java.awt.event
Bagaimana event handling dalam Java? ada tiga langkah penting dalam event handling
  1. Deklarasikan class yang akan meng-handle event yang terjadi dan tuliskan code yang menyatakan class tersebut meng-implement interface listener
  2. Event source mendaftarkan sebuah listener melalui method add<type>Listener
  3. Kode yang mengimplementasikan method pada interface listener pada class yang akan meng-handle event. [ Override ]
Contoh 1
MouseEventsDemo.java
package mouseeventsdemo;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author Ren
*/
public class MouseEventsDemo extends Frame implements MouseListener, MouseMotionListener {  // Langkah 1
TextField tf;
public MouseEventsDemo( String title){
super(title);
tf = new TextField(60);
addMouseListener(this); // Langkah 2
}
public void launchFrame() {
/* Menambah komponen pada frame */
add(tf, BorderLayout.SOUTH);
setSize(300,300);
setVisible(true);
}
public void mouseClicked(MouseEvent me) { // Langkah 3
String msg = “Mouse clicked.”;
tf.setText(msg);
}
public void mouseEntered(MouseEvent me) {
String msg = “Mouse entered component.”;
tf.setText(msg);
}
public void mouseExited(MouseEvent me) {
String msg = “Mouse exited component.”;
tf.setText(msg);
}
public void mousePressed(MouseEvent me) {
String msg = “Mouse pressed.”;
tf.setText(msg);
}
public void mouseReleased(MouseEvent me) {
String msg = “Mouse released.”;
tf.setText(msg);
}
public void mouseDragged(MouseEvent me) {
String msg = “Mouse dragged at ” + me.getX()
+ “,” + me.getY();
tf.setText(msg);
}
public void mouseMoved(MouseEvent me) {
String msg = “Mouse moved at ” + me.getX()
+ “,” + me.getY();
tf.setText(msg);
}
}
main.java
package mouseeventsdemo;
/**
*
* @author Ren
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
MouseEventsDemo med = new MouseEventsDemo(“Mouse Events Demo”);
med.launchFrame();
}
}

Semoga bermanfaat. Jika salah KOREKSI saya.^_^

Melihat lebih dekat apa itu HALLO SWT :D

Secara umum aplikasi SWT membutuhkan beberapa langkah sebagai berikut :
  1. Buat Display baru
  2. Buat satu atau lebih Shell
  3. Buat manager layout untuk Shell baru
  4. Buat widget di dalam shell
  5. Buka jendela shell
  6. Buat perulangan pengirim event
  7. Buang (dispose) display dan widget-widget lainnya
  8. Tentunya import berbagai paket yang diperlukan oleh program
package helloswt;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
 
public class HelloSWT {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout( new RowLayout());
        Label label = new Label(shell, SWT.NONE);
        label.setText("Hello, World!");
        shell.pack();
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch())
                display.sleep();
        display.dispose();
        label.dispose();
    }
}
Mari kita bahas satu per satu

1. Membuat Display baru

Membuat Display dapat dilakukan dengan membuat instansi dari objek bertipe Display, misalnya seperti perintah berikut
Display display = new Display();
Display (tampilan) adalah objek maya yang merupakan kontainer induk semua komponen GUI. Suatu tampilan sebetulnya tidak terlihat, akan tetapi komponen yang ditambahkan ke dalam tampilan dapat dilihat. Biasanya, suatu aplikasi hanya membutuhkan satu tampilan.

2. Membuat Shell baru

Membuat Shell dapat dilakukan dengan membuat instansi dari objek bertipe Shell, misalnya seperti perintah berikut
Shell shell = new Shell(display);
Pada pernyataan di atas, konstruktor Shell mengambil parameter yang merupakan induk di mana shell ini akan diletakkan. Pada pernyataan di atas, kita membuat objek shell bertipe Shell yang memiliki induk objek display.
Shell adalah jendela suatu aplikasi. Shell tertinggi adalah shell yang berada langsung di bawah objek bertipe Display, dan merupakan jendela utama suatu aplikasi. Shell sebenarnya adalah widget komposit, yaitu suatu widget yang terdiri dari beberapa widget lain. Oleh karenanya shell juga bisa berisi shell lain. Untuk aplikasi sederhana yang menampilkan kata "Hello World!", kita hanya membutuhkan satu shell saja yang kita letakkan pada objek display.

3. Membuat manager layout untuk Shell baru

Untuk membuat manager layout, kita menggunakan metode instansi dari objek shell, yaitu setLayout() yang mengambil parameter jenis layout yang akan disusun pada shell. Misalnya,
shell.setLayout( new RowLayout());
Pada contoh di atas, kita memerintahkan objek shell untuk mengatur widget-widget di dalamnya dalam urutan seperti baris. RowLayout adalah kelas layout yang digunakan objek shell untuk mengatur objek widget di dalamnya.
Manager layout digunakan untuk mengatur secara otomatis peletakkan setiap widget. Pada SWT, objek komposit seperti Shell tidak mengetahui bagaimana widget harus ditampilkan. Oleh karenanya jika kita tidak memberikan manager layout kepada objek bertipe Shell, maka tidak ada widget yang akan ditampilkan.
Bahasan khusus tentang layout cukup kompleks, dan karenanya kita akan bahas tersendiri pada bagian selanjutnya.

4. Membuat widget di dalam shell

Widget adalah komponen pembangun GUI. Menu, tombol, teks, kotak cek, kotak input teks, hingga kanvas, adalah contoh-contoh widget. Setiap widget memiliki sifat dan cara kerja yang berbeda-beda. Pada contoh ini, kita menggunakan widget yang sangat sederhana yang dinamakan Label. Widget ini digunakan untuk menampilkan teks, misalnya digunakan sebagai label atau pertanyaan pada suatu input teks.
Pada contoh HelloSWT, kita gunakan konstruktor yang mengambil 2 parameter. Yang pertama, adalah kontainer induk di mana Label ini akan ditampilkan, dan parameter kedua adalah bit gaya.
Label label = new Label(shell, SWT.NONE);
Label ini kemudian kita isi dengan kata "Hello Word!" untuk menampilkan kata ini pada jendela utama.
label.setText("Hello, World!");

5. Membuka jendela shell

Setelah Display, Shell, dan widget-widgetnya disiapkan, kita perlu secara eksplisit memerintahkan shell untuk membuka jendela dan menggambar seluruh widget yang sudah disiapkan. Untuk ini kita gunakan perintah
shell.open();

6. Membuat perulangan pengirim event

SWT mengharuskan kita untuk membuat sendiri perulangan untuk mengirimkan event. Artinya, blok perintah berikut ini "harus" selalu ada dalam semua aplikasi SWT yang akan kita buat.
while (!shell.isDisposed())
    if (!display.readAndDispatch())
        display.sleep();

7. Membuang (dispose) display dan widget-widget lainnya

Karena SWT bekerja langsung dengan widget bawaan sistem operasi, maka tanggung jawab untuk menghapus komponen GUI ada di tangan programmernya. Hal ini disebabkan widget tersebut berada di luar jangkauan pemulung memori Java yang hanya bisa meraih objek yang dibuat dan dijalankan dalam JVM (Java Virtual Machine).
Untuk menghapus widget dari memori, kita dapat menggunakan metode dispose() yang dimiliki oleh hampir semua widget SWT. Pada contoh program ini, kita memiliki 2 widget, yaitu shell dan label, sehingga keduanya harus dihapus dengan menggunakan perintah
display.dispose();
label.dispose();

8. Mengimport berbagai paket yang diperlukan oleh program

Kita bisa menggunakan Eclipse untuk membantu kita mengimpor setiap paket (seperti yang diilustrasikan pada bagian sebelumnya), atau menggunakan wildcard seperti import org.eclipse.swt.widgets.*
Beberapa paket penting yang tersedia pada SWT :
Nama PaketKegunaan
org.eclipse.swtBerisi kelas SWT, kumpulan konstanta, dan kelas-kelas pengecualian dan kesalahan
org.eclipse.swt.widgetsWidget dan kelas-kelas yang berhubungan dengannya, misalnya menu, kotak dialog, dukungan event, kelas super abstrak untuk layout, dan sebagainya
org.eclipse.swt.eventsEvent tingkat tinggi, pendengar event, dan colokan (adapter)
org.eclipse.swt.layoutKelas layout standar seperti FillLayout, RowLayout, GridLayout, FormLayout, dan kelas-kelas lainnya
org.eclipse.swt.graphicsHuruf, warna, gambar, dan operasi grafik dasar, seperti untuk menggambar garis dan lingkaran
org.eclipse.swt.customWidget buatan sendiri dan kelas lain yang dibuat khusus untuk Eclipse; tidak bergantung pada platform apapun (implementasinya sama pada semua sistem operasi)
org.eclipse.swt.dndKelas bantuan untuk melakukan drag-and-drop pada berbagai platform
org.eclipse.swt.accessibilityPerluasan untuk memberikan bantuan dan dukungan untuk orang cacat
org.eclipse.swt.printingDukugan printer dan kotak dialog untuk melakukan percetakan
org.eclipse.swt.programBerisi kelas Program, untuk mempermudah pada saat program dijalankan, pemetaan dokumen, dan icon; juga dibuat untuk Eclipse, akan tetapi sangat bergantung pada platformnya (implementasinya bisa berbeda untuk setiap sistem operasi)
org.eclipse.swt.browserMenyediakan widget sebagai web broswer, dan kelas-kelas yang mendukungnya. Menggunakan browser bawaan sistem operasi untuk implementasinya
org.eclipse.swt.awtMenyediakan dukungan untuk membuat UI yang berisi campuran widget dari SWT dan AWT
org.eclipse.swt.win32.oleHanya tersedia pada Windows; menyediakan fasilitas untuk mengakses OLE (Object Linking and Embedding)

Mengkompilasi dan Membuat Program SWT Berjalan di Luar Eclipse

Untuk bisa membuat program kita berguna untuk orang lain, kita harus bisa mengkompilasi dan membuat program tersebut sebagai satu "paket". Proses ini disebut menyebarkan (deploy). Pada Eclipse, program yang telah kita buat bisa kita deploy dalam format JAR (Java Archive), yang menggabungkan semua file kelas yang sudah dikompilasi beserta pustaka yang dibutuhkan untuk bisa menjalankan program tersebut.
Mari kita lihat contoh program HelloSWT yang sudah dibahas sebelumnya. Untuk men-deploy program ini sehingga bisa dijalankan di luar Eclipse, lakukan langkah-langkah berikut :
  • Klik kanan pada nama proyek Anda, kemudian pilih Export. Setelah itu kotak dialog akan terbuka. Kemudian pilih Runnable JAR File dari dalam folder Java.
  • Pilih HelloSWT - HelloSWT pada Launch configuration dan juga masukkan di mana file JAR hasilnya akan ditempatkan. Jika nama direktori tidak diberikan, Eclipse akan meletakkan file JAR tersebut pada direktori di mana workspace berada, yaitu di mana data proyek ditempatkan. (Misalnya, di komputer saya proyek HelloSWT berada pada direktori C:\belajarjava.lyracc.com\HelloSWT, maka file JAR tersebut akan diletakkan pada direktori C:\belajarjava.lyracc.com\)

  • Klik Finish, kemudian OK untuk setiap pertanyaan yang mungkin muncul berikutnya. Sekarang, gunakan Windows Explorer untuk mencari di mana file JAR hasilnya berada. Double click pada file tersebut dan Anda akan bisa menjalankannya langsung seperti aplikasi lainnya. Anda bisa juga mengirimkan file ini melalui email atau mengkopinya melalui flash disk ke teman atau kerabat Anda tanpa perlu menyertakan Eclipse.

  • CATATAN : Ingat bahwa SWT bergantung penuh pada sistem operasi yang Anda gunakan, karena SWT menggunakan widget bawaan sistem operasi seperti dijelaskan pada bagian sebelumnya. Ketika Anda membuat program ini pertama kali, Anda menambahkan pustaka SWT yang spesifik terhadap sistem operasi di mana Eclipse berjalan. Artinya, jika Anda menambahkan pustaka org.eclipse.swt.win32.win32.x86_3.4.1.v3449c, maka program JAR Anda hanya akan bisa dijalankan pada sistem operasi Windows. Untuk bisa menjalankannya pada sistem operasi lain, mhsalnya Linux, maka Anda harus menambahkan pustaka SWT khusus Linux yang bisa diunduh secara terpisah atau menggunakan Eclipse pada Linux.
  • Berikut ini adalah screen shot hasil jalannya program

Memulai SWT

  • Anda membutuhkan "link" ke pustaka SWT. Ada dua cara untuk melakukannya :
  1. Menggunakan pustaka SWT bawaan dari Eclipse. Untuk ini Anda tidak perlu mendownload apa-apa. Pustaka SWT bawaan eclipse terdapat pada direktori Eclipse Anda, misalnya pada Windows (C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar) atau pada Linux (eclise/plugins/org.eclipse.swt.gtk.linux.x86_3.4.1.v3452b.jar)
  2. Menggunakan pustaka SWT beserta sumber kodenya untuk dokumentasi lebih lengkap. Pustaka SWT ini bisa diunduh pada alamat berikut : http://www.eclipse.org/swt/. Pilih Releases -> Stable -> (platform Anda, misalnya Windos atau Linux). Setelah diunduh, import ke dalam Eclipse seperti Anda mengimport proyek-proyek pada website ini, yaitu dengan File -> Import -> General -> Existing Projects Into Workspace -> Select Archieve File -> (file zip SWT hasil download) -> Finish. Langkah ini hanya dilakukan satu kali saja.
  • Buat proyek baru dari Eclipse, File -> New -> Java Project, kemudian isi Project Name dengan HelloSWT dan click Next
  • Kita harus menambahkan pustaka SWT ke dalam proyek kita.
  1. Jika Anda menggunakan SWT bawaan Eclipse seperti di atas, pilih halaman Libraries. Klik Add External JAR, kemudian navigasi ke direktori plugin di dalam instalasi Eclipse Anda. Misalnya di komputer saya, direktori itu berada di C:\eclipse\plugins. Pilih JAR untuk SWT pada direktori tersebut. Namanya tergantung dari sistem operasi Anda, misalnya pada Windows file ini bernama org.eclipse.swt.win32.win32.x86_3.4.1.v3449c. Klik OK setelah file ini ditambahkan di dalam folder Libraries.
  1. Jika Anda mengunduh proyek SWT, pilih halaman Projects. Klik Add, kemudian tambahkan org.eclipse.swt. Kemudian klik OK setelah proyek ini ditambahkan.
  • Folder proyek baru akan dibuat, seperti pada gambar berikut. 
  • Kemudian klik kanan pada folder src, dan pilih New -> Class. Isi nama kelas dengan HelloSWT, nama package dengan helloswt, dan tik "public static void main(String[] args)" untuk membuat metode main() secara otomatis.
  • Ketik kode berikut ini di dalam metode main()
Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout( new RowLayout());
        Label label = new Label(shell, SWT.NONE);
        label.setText("Hello, World!");
        shell.pack();
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch())
                display.sleep();
        display.dispose();
        label.dispose();
  • Perhatikan bahwa Display, Shell, RowLayout dan Label diberi tanda merah sebagai tanda bahwa kesalahan program terjadi.
  • Sekarang pindahkan mouse Anda pada kesalahan pada kelas Display. Eclipse akan memberi tahu Anda kesalahan apa yang terjadi. Pada contoh ini, kelas 'Display' belum diketahui oleh Eclipse. Klik pada pilihan Import 'Display' (org.eclipse.swt.widgets).  Lihat sekarang di awal program Anda Eclipse menambahkan import org.eclipse.swt.widgets.Display; secara otomatis.
  • Lakukan hal yang sama pada semua kesalahan, yaitu Shell, Label, RowLayout dan SWT.NONE, sehingga tidak ada lagi kesalahan yang dilaporkan oleh Eclipse.
  • Untuk menjalankan program Anda, klik tombol Run seperti pada gambar berikut.
  • Berikut ini adalah tampilan program SWT pertama Anda.

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 Java? Untuk menjawab pertanyaan ini, kit` perlu melihat kilas balik tentang Java di awal perkembangannya.
Sun telah membuat rangka kerja GUI yang dinamakan AWT (Abstract Windowing Toolkit). Rangka kerja AWT menggunakan widget (komponen pada GUI, seperti tombol, menu, teks, dll) alami yang merupakan bawaan dari setiap sistem operasi. Akan tetapi widget tersebut memiliki masalah pada LCD. Masalah LCD ini mengakibatkan hilangnya beberapa fitur pada sistem operasi lain. Atau dengan kata lain, jika platform A memiliki widget 1 - 40 dan platform B memiliki widget 20*- 25, maka rangka kerja AWT hanya bisa digunakan untuk sebagian widget yang beririsan saja.
Untuk memecahkan masalah ini, Sun membuat rangka kerja baru yang merupakan emulasi widget, bukan menggunakan widget bawaan platform. Hal ini memecahkan masalah LCD dan memberikan rangka kerja yang kaya widget, akan tetapi masalah lain muncul. Misalnya, aplikasi Swing tidak lagi mirip seperti aplikasi lain pada platform di mana ia dijalankan.
Dengan adanya perbaikan pada JVM, aplikasi Swing tetap saja mengalami masalah kinerja karena sifatnya yang berupa emulasi. Hal ini tidak ditemukan pada widget bawaan platform karena widget ini lebih dekat dengan sistem operasi. Lebih jauh, aplikasi Swing menghabiskan lebih banyak memori yang tidak bisa digunakan untuk piranti kecil seperti PDA dan telepon genggam.
IBM memutuskan bahwa pendekatan tersebut tidak memenuhi kebutuhannya. Akhirnya, IBM membuat pustaka GUI baru yang disebut SWT, yang memecahkan masalah yang terdapat pada rangka kerja AWT dan Swing. Rangka kerja SWT langsung mengakses widget bawaan sistem operasi melalui JNI. Jika widget tersebut tidak tersedia, maka SWT akan mengemulasi widget yang hilang itu.
Blok Penyusun Suatu Aplikasi SWT
Display, Shell dan kumpulan Widget adalah blok penyusun aplikasi SWT. Display bertugas untuk mengatur perulangan event (dari keyboard atau mouse) dan mengatur komunikasi antara thread UI dan thread lainnya. Shell adalah jendela di mana aplikasi berjalan. Setiap aplikasi SWT memiliki paling tidak satu Display dan satu atau lebih instansi Shell.
Gambar di atas mengilustrasikan aplikasi SWT dari sudut pandang yang berbeda. Diagram pertama di sebelah kiri adalah diagram kelas-kelas turunan dari objek-objek UI. Diagram tengah adalah bagaimana objek UI diletakkan, dan gambar kanan adalah UI yang dihasilkan.
Jika suatu aplikasi menggunakan beberapa thread, setiap thread akan memiliki instansi objek Display masing-masing. Kita bisa mengambil instansi suatu objek Display dengan menggunakan metode statik Display.getCurrent().
Suatu Shell melambangkan jendela suatu aplikasi. Shell bisa ditampilkan dalam ukuran seluruh layar, ukuran biasa, atau dikecilkan hingga tak terlihat. Ada dua jenis shell yang tersedia. Yang pertama adalah shell dengan tingkat paling tinggi, yaitu yang dibuat langsung sebagai anak dari jendela utama Display. Jenis kedua adalah shell dialog yang bergantung pada shell-shell lainnya.
Jenis suatu Shell bergantung pada bit gaya (style bit) yang diberikan pada konstruktornya. Nilai awalnya adalah DialogShell. Artinya, jika tidak ada parameter yang diberikan pada konstruktornya, maka shell yang dibuat akan bertipe DialogShell. Jika parameter konstruktornya berupa objek bertipe Display, maka ia akan menjadi shell tingkat atas.
Beberapa sifat widget harus ditentukan pada saat widget tersebut dibuat. Sifat widget tersebut disebut bit gaya (style bit). Bit gaya ini adalah konstanta yang didefinisikan dalam kelas SWT. Misalnya,
Button tombol = new Button(shell, bitGaya)
Kita bisa menggunakan lebih dari satu gaya dengan menggunakan operator OR atau |. Misalnya, kita ingin membuat tombol yang bisa ditekan dan memiliki garis tepi, kita bisa menggunakan SWT.PUSH | SWT.BORDER sebagai parameter bit gayanya.

Konsep Dasar Stream

Konsep Stream




• 

Stream adalah suatu abstraksi untuk data input dan output
– Tidak peduli dari mana input berasal atau kemana output akan pergi


Package java.io


• 

Package java.io berisi kelas yang

berhubungan dengan I/O di Java
E • Dibagi menjadi beberapa kelas
   – Reader/Writer dan turunannya
   – InputStream/OutputStream dan turunannya
   – I/O Network (socket TCP/IP)
   – Exception


Kelas Abstrak pada java.io
• Ada 4 kelas abstrak dasar
– Reader
– Writer
– InputStream
– OutputStream
• Reader dan Writer digunakan untuk data teks
• InputStream dan OutputStream digunakan untuk data biner


Kelas Reader/Writer
• Kelas Reader/Writer bekerja pada
stream teks (bahasa apapun)
• Disebut juga character stream
• Menangani konversi teks Unicode secara
otomatis
• Jangan dipertukarkan dengan
InputStream/OutputStream secara
sembarangan
• Hasilnya bisa error


Diagram Kelas Reader dan Turunannya



Diagram Kelas Writer dan Turunannya

Kelas InputStream/OutputStream

• InputStream dan OutputStream 
digunakan untuk mengakses informasi non teks ( biner ) 

– disebut juga sebagai byte stream
– COntoh data biner: File EXE, file GIF
• InputStream/OutputStream Tidak
menangani konversi teks Unicode secara
otomatis

Diagram Kelas InputStream dan 
Turunannya


Diagram Kelas OutputStream dan 
Turunannya


Input dan Output File
• Gunakan FileInputStream dan 
FileOutputStream untuk membaca menulis file non teks

• Gunakan FileReader/FileWriter
untuk file teks


Contoh Membuka file untuk dib`ca :




• Cara untuk membuka file (untuk dibaca):
FileInputStream s = new
FileInputStream(“test.dat”);
• Cara untuk membaca satu byte:
int a = s.read()
• Tersedia juga method untuk membaca array 

of byte


• Prototype read adalah : int read()
– Perlu dicast ke byte untuk membaca sebagai byte
– Memakai int supaya cukup merepresentasikan -1

Contoh Membuka file untuk ditulis :
• Cara untuk membuka file (untuk ditulisi):
FileOutputStream out = new
FileOutputStream(“test.out”);
• Intruksi untuk menulis satu byte:
– Out.write(‘a’)
• Tersedia juga method untuk menulis
array of byte

Memakai File Reader/File Writer
• Sama seperti contoh sebelumnya
– Ganti nama kelas FileInputStream 
dengan FileReader dan FileOutputStream dengan File 
– Tetap gunakan read/write

• Perhatikan bahwa
– Nilai kembalian

Wrapper

• Stream dapat dikomposisi atau difilter atau
dibungkus untuk menghasilkan stream yang lebih kompleks

• Konsep ini mirip dengan pipe di
Unix/Windows
• Contoh:
– BufferedReader yang menyediakan
readLine()
– PipedWriter/PipedReader untuk mempipe
suatu stream
– PrintStream/PrintWriter untuk menulis ke
stream dengan mudah

Contoh Wrapper: BufferedReader :

• Perhatikan potongan kode berikut:
BufferedReader br*= new
BufferedReader(new
FileReader(“hello.txt”));
//membaca 1 baris
String teks = br.readLine();
• BufferedReader membungkus
(wraps) FileReader untuk
menyediakan method readLine()

Contoh Wrapper: PrintWriter :

• Perhatikan potongan kode berikut:
PrintWriter pr = new
PrintWriter(new
FileWriter(“hello.txt”));
//Menulis 1 baris
pr.println(“Hello “);
• PrintWriter membungkus (wraps)
FileWriter untuk menyediakan
method print(), println() untuk
semua tipe data dasar

Enkripsi Dekripsi pada JAVA

Aplikasi ini merupakan aplikasi yang akan saya ajukan pada penulisan ilmiah. Aplikasi ini dapat didownload secara gratis, untuk membantu memprotect file anda. Jika anda akan gunakan untuk memprotect file anda, maka anda akan diminta memasukkan sederetan kunci (password) untuk menjamin kerahasian anda.

Contoh Enkripsi dan Deskripsi :
mport javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class Enkripsi extends JFrame{
static String teks=”";
private JLabel LabelPesan=new JLabel(“Pesan:”);
private static JTextField TeksImputan=new JTextField(40);
private JLabel LabelPergeseran=new JLabel(“Pergeseran”);
private static JTextField TeksPergeseran=new JTextField(“2″);
private JLabel LabelEnkripsi=new JLabel(“Hasil Enkripsi:”);
private static JTextField TeksHasilEnkripsi=new JTextField(40);
private JButton TombolEnkripsi=new JButton(“Enkripsi”);
private JButton TombolReset=new JButton(“Reset”);
private JPanel PanelPesan_Label=new JPanel();
private JPanel PanelTombol=new JPanel();
public Enkripsi(){ //mengatur GUI
PanelTombol.setLayout(new GridLayout(6,1,30,10));
PanelTombol.add(LabelPesan);
TeksImputan.setToolTipText(“Isi pesan yang akan dienkripsi di sini”);
PanelTombol.add(TeksImputan);
PanelTombol.add(LabelPergeseran);
TeksPergeseran.setToolTipText(“Masukkan pergeseran di sini”);
PanelTombol.add(TeksPergeseran);
PanelTombol.add(LabelEnkripsi);
TeksHasilEnkripsi.setToolTipText(“Anda tidak perlu mengisi bagian ini. Bagian ini akan terisi setelah Anda melakukan enkripsi.”);
PanelTombol.add(TeksHasilEnkripsi);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
add(PanelTombol);
TombolEnkripsi.setToolTipText(“Klik untuk melakukan enkripsi pesan”);
PanelPesan_Label.add(TombolEnkripsi);
TombolReset.setToolTipText(“Klik untuk menghapus semua pesan”);
PanelPesan_Label.add(TombolReset);
setLayout(new FlowLayout(FlowLayout.CENTER));
add(PanelPesan_Label,BorderLayout.SOUTH);
TombolEnkripsi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try
{
int pergeseran=Integer.valueOf(TeksPergeseran.getText());
if(pergeseran>0 && pergeseran0){
for(int i=0;i=48 && kode_ASCII=65 && kode_ASCII=97 && kode_ASCII=33 && kode_ASCII=58 && kode_ASCII=91 && kode_ASCII=123 && kode_ASCII<=126)
ArrayHuruf[i]=(char)((kode_ASCII-123+pergeseran)%4+123);
}
}
teks=String.valueOf(ArrayHuruf);
}
else{
JOptionPane.showMessageDialog(null,”Error!!\nMasukkan pesan yang akan dienkripsi dulu”,”ERROR”,JOptionPane.ERROR_MESSAGE);
}
return teks;
}
}

7.3.12

Konsep Dasar Stream IO

 


Tipe-Tipe Stream yang Umum Digunakan :
stream karakter dan byte. Kita hanya mengulang perbedaan mendasar antara
keduanya. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan
stream karakter adalah untuk karakter Unicode.
Class InputStream adalah abstraksi class root untuk semua input stream byte sedangkan
class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk
stream karakter, superclasss yang sesuai dari semua class-class secara berturut-turut
adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class
untuk membaca dan menulis stream karakter.

Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau
menulis stream.

Contoh Stream/IO :

import java.io.*;
class CopyFile {
void copy(String inptt, String output) {
FileReader reader;
FileWriter writer;
int data;
try {
reader = new FileReader(input);
writer = new FileWriter(output);
while ((data = reader.read()) != -1) {
writer.write(data);
}
reader.close();
writer.close();
} catch (IOException ie) {
ie.printStackTrace();
}

}
public static void main(String args[]) {
String inputFile = args[0];
String outputFile = args[1];
CopyFile cf = new CopyFile();
cf.copy(inputFile, outputFile);
}
}