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.
Showing posts with label JAVA MOKLET. Show all posts
Showing posts with label JAVA MOKLET. Show all posts
3.5.12
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/
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:
berikut ini type type event yang ada di Java :
Bagaimana event handling dalam Java? ada tiga langkah penting dalam event handling
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.^_^
- Event Object merupakan object yang mendiskripsikan sebuah event yang di-trigger oleh event source.
- Event Handler merupakan method yang menerima event object dan melakukan respond yang sesuai dengan event object tersebut.
- 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
- Event Source merupakan pembangkit / trigger sebuah event objects
berikut ini type type event yang ada di Java :
- ActionEvent
- ItemEvent
- WindowEvent
- ContainerEvent
- ComponentEvent
- FocusEvent
- TextEvent
- KeyEvent
- MouseEvent
- AdjustmentEvent
- ActionListener
- ItemListener
- WindowListener
- ContainerListener
- ComponentListener
- FocusListener
- TextListener
- KeyListener
- MouseListener
- MouseMotionListener
- AdjustmentListener
Bagaimana event handling dalam Java? ada tiga langkah penting dalam event handling
- Deklarasikan class yang akan meng-handle event yang terjadi dan tuliskan code yang menyatakan class tersebut meng-implement interface listener
- Event source mendaftarkan sebuah listener melalui method add<type>Listener
- Kode yang mengimplementasikan method pada interface listener pada class yang akan meng-handle event. [ Override ]
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 :
Mari kita bahas satu per satu
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.
Pada pernyataan di atas, konstruktor
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.
Pada contoh di atas, kita memerintahkan objek shell untuk mengatur widget-widget di dalamnya dalam urutan seperti baris.
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.
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 ini kemudian kita isi dengan kata "Hello Word!" untuk menampilkan kata ini pada jendela utama.
Untuk menghapus widget dari memori, kita dapat menggunakan metode
Beberapa paket penting yang tersedia pada SWT :
- Buat Display baru
- Buat satu atau lebih Shell
- Buat manager layout untuk Shell baru
- Buat widget di dalam shell
- Buka jendela shell
- Buat perulangan pengirim event
- Buang (dispose) display dan widget-widget lainnya
- 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(); } }
1. Membuat Display baru
Membuat Display dapat dilakukan dengan membuat instansi dari objek bertipe Display, misalnya seperti perintah berikutDisplay display = new Display();
2. Membuat Shell baru
Membuat Shell dapat dilakukan dengan membuat instansi dari objek bertipe Shell, misalnya seperti perintah berikutShell shell = new Shell(display);
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, yaitusetLayout() yang mengambil parameter jenis layout yang akan disusun pada shell. Misalnya,shell.setLayout( new RowLayout());
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.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 perintahshell.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 perintahdisplay.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 sepertiimport org.eclipse.swt.widgets.*Beberapa paket penting yang tersedia pada SWT :
| Nama Paket | Kegunaan |
| org.eclipse.swt | Berisi kelas SWT, kumpulan konstanta, dan kelas-kelas pengecualian dan kesalahan |
| org.eclipse.swt.widgets | Widget dan kelas-kelas yang berhubungan dengannya, misalnya menu, kotak dialog, dukungan event, kelas super abstrak untuk layout, dan sebagainya |
| org.eclipse.swt.events | Event tingkat tinggi, pendengar event, dan colokan (adapter) |
| org.eclipse.swt.layout | Kelas layout standar seperti FillLayout, RowLayout, GridLayout, FormLayout, dan kelas-kelas lainnya |
| org.eclipse.swt.graphics | Huruf, warna, gambar, dan operasi grafik dasar, seperti untuk menggambar garis dan lingkaran |
| org.eclipse.swt.custom | Widget buatan sendiri dan kelas lain yang dibuat khusus untuk Eclipse; tidak bergantung pada platform apapun (implementasinya sama pada semua sistem operasi) |
| org.eclipse.swt.dnd | Kelas bantuan untuk melakukan drag-and-drop pada berbagai platform |
| org.eclipse.swt.accessibility | Perluasan untuk memberikan bantuan dan dukungan untuk orang cacat |
| org.eclipse.swt.printing | Dukugan printer dan kotak dialog untuk melakukan percetakan |
| org.eclipse.swt.program | Berisi 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.browser | Menyediakan widget sebagai web broswer, dan kelas-kelas yang mendukungnya. Menggunakan browser bawaan sistem operasi untuk implementasinya |
| org.eclipse.swt.awt | Menyediakan dukungan untuk membuat UI yang berisi campuran widget dari SWT dan AWT |
| org.eclipse.swt.win32.ole | Hanya 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 :


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 :
- 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)
- 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.
- 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.

- 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,RowLayoutdanLabeldiberi 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 menambahkanimport org.eclipse.swt.widgets.Display;secara otomatis.

- Lakukan hal yang sama pada semua kesalahan, yaitu
Shell,Label,RowLayoutdanSWT.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
Package java.io
– 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
•
– Tidak peduli dari mana input berasal atau kemana output akan pergiStream adalah suatu abstraksi untuk data input dan output
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 :
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;
}
}
Contoh Enkripsi dan Deskripsi :
mport javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
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();
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(){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);
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);
}
}
Subscribe to:
Posts (Atom)