Senin, 12 Maret 2012

GUI Java (AWT, SWT dan Swing)

Swing Java utama GUI widget toolkit. Ini adalah bagian dari Oracle Yayasan Kelas Jawa (JFC) - API untuk menyediakan antarmuka pengguna grafis (GUI) untuk program Java.
Ayunan dikembangkan untuk menyediakan satu set yang lebih canggih dari komponen GUI dari Toolkit Jendela sebelumnya Abstrak (AWT). Ayunan memberikan tampilan asli dan merasa bahwa mengemulasi tampilan dan nuansa dari beberapa platform, dan juga mendukung tampilan yang pluggable dan nuansa yang memungkinkan aplikasi untuk melihat dan merasa tidak berhubungan dengan platform yang mendasari. Ini memiliki lebih kuat dan fleksibel daripada komponen AWT. Selain komponen akrab seperti tombol, kotak centang dan label, Swing menyediakan komponen canggih seperti beberapa tab panel, panel gulir, pohon, tabel dan daftar.
Tidak seperti komponen AWT, Swing komponen tidak diimplementasikan dengan platform kode khusus. Sebaliknya mereka ditulis seluruhnya di Jawa dan karena itu adalah platform-independen. Istilah "ringan" digunakan untuk menggambarkan elemen seperti itu.Sejarah
The Foundation Classes Internet (IFC) adalah sebuah perpustakaan grafis untuk Java awalnya dikembangkan oleh Netscape Communications Corporation dan pertama kali dirilis pada tanggal 16 Desember 1996. Pada tanggal 2 April 1997, Sun Microsystems dan Netscape Communications Corporation mengumumkan niat mereka untuk memasukkan IFC dengan teknologi lainnya untuk membentuk Yayasan Jawa Kelas. "Java Yayasan Kelas" yang kemudian berganti nama menjadi "Swing".
Swing memperkenalkan mekanisme yang memungkinkan tampilan dan nuansa dari setiap komponen dalam aplikasi harus diubah tanpa membuat perubahan besar pada kode aplikasi. Pengenalan dukungan untuk pluggable melihat dan merasakan memungkinkan komponen Swing untuk meniru penampilan komponen asli, namun tetap menyimpannya manfaat dari platform kemerdekaan. Awalnya didistribusikan sebagai perpustakaan terpisah download, Swing telah dimasukkan sebagai bagian dari Java Standard Edition sejak rilis 1,2 . Kelas Swing dan komponen yang terkandung dalam hirarki paket javax.swing.Arsitektur swing
Swing adalah platform-independen, Model-View-Controller GUI framework untuk Java. Ini mengikuti model pemrograman single-threaded.Yayasan
Swing adalah platform-independen karena benar-benar ditulis di Jawa. Dokumentasi lengkap untuk semua kelas swing dapat ditemukan di Java API Guide. Extensible
Swing adalah arsitektur yang sangat modular, yang memungkinkan untuk "plugging" implementasi kustom berbagai antarmuka kerangka tertentu: Pengguna dapat menyediakan implementasi adat mereka sendiri (s) dari komponen ini untuk menimpa implementasi default menggunakan mekanisme warisan Jawa.
;/span>Swing adalah kerangka kerja berbasis komponen. Perbedaan dan komponen adalah titik yang cukup halus: ringkas, komponen Swing kelas keturunan javax.swing.JComponent kelas. Ayunan objek asynchronous peristiwa kebakaran, telah "terikat" properti, dan menanggapi satu set didokumentasikan metode khusus untuk komponen. Komponen Swing adalah komponen Java Beans, kompatibel dengan spesifikasi Komponen Beans Arsitektur Jawa.Customizable
Mengingat rendering model program dari kontrol swing framework, baik atas rincian rendering dari komponen mungkin dalam Swing. Sebagai pola umum, representasi visual dari komponen Swing adalah komposisi satu set standar elemen, seperti "perbatasan", "inset", dekorasi, dan properti lainnya. Biasanya, pengguna pemrograman akan menyesuaikan komponen swing standar (seperti JTable) dengan menetapkan Borders tertentu, Warna, latar belakang, kekeruhan, dll, untuk komponen tersebut. Komponen inti kemudian akan menggunakan properti ini untuk membuat sendiri. Namun, juga sepenuhnya mungkin untuk menciptakan kontrol GUI yang unik dengan representasi visual sangat disesuaikan.Dikonfigurasi
Ketergantungan Swing pada mekanisme waktu berjalan dan pola komposisi tidak langsung memungkinkan untuk merespon pada waktu berjalan perubahan mendasar dalam pengaturannya. Misalnya, aplikasi Swing berbasis dapat mengubah tampilan dan nuansa pada waktu berjalan. Selanjutnya, pengguna dapat memberikan tampilan mereka sendiri dan merasa implementasi, yang memungkinkan untuk perubahan seragam dalam tampilan dan nuansa dari aplikasi Swing yang ada tanpa ada perubahan program ke kode aplikasi.
Ringan UI
Tingkat tinggi Swing fleksibilitas adalah hasil dari pilihan untuk tidak menggunakan GUI kontrol host asli OS untuk menampilkan sendiri. Ayunkan "cat" kontrol dengan menggunakan Java 2D API, daripada memanggil toolkit antarmuka pengguna asli. Dengan demikian, komponen swing tidak memiliki asli sesuai OS komponen GUI, dan bebas untuk membuat sendiri dengan cara apapun yang mungkin dengan API grafis yang mendasarinya.
Namun, pada intinya, setiap komponen swing bergantung pada wadah AWT, karena (Swing) JComponent meluas (s AWT) Container. Hal ini memungkinkan Swing untuk plug ke kerangka kerja manajemen GUI host OS, termasuk perangkat / layar pemetaan penting dan interaksi pengguna, seperti penekanan tombol atau pergerakan mouse. Ayunkan hanya "Transpos" sendiri (OS agnostik) semantik atas (OS spesifik) komponen yang mendasarinya. Jadi, misalnya, setiap komponen swing melukis rendition pada perangkat grafis dalam menanggapi panggilan untuk component.paint (), yang didefinisikan dalam (AWT) Container. Tapi tidak seperti komponen AWT, yang didelegasikan lukisan untuk OS-ibu mereka widget "kelas berat", komponen Swing bertanggung jawab untuk rendering mereka sendiri.
Ini transposisi dan decoupling bukan hanya visual, dan meluas ke manajemen Swing dan aplikasi sendiri OS-independen semantik untuk acara dipecat dalam hirarki penahanan yang komponen. Secara umum, delegasi swing Arsitektur tugas memetakan berbagai rasa dari semantik OS GUI ke sebuah sederhana, tetapi umum, pola untuk wadah AWT. Membangun bahwa platform umum, ia menetapkan semantik sendiri GUI kaya dan kompleks dalam bentuk model JComponent.Longgar-Ditambah dan MVC
Perpustakaan swing membuat berat penggunaan pola desain Model / View / Controller perangkat lunak,yang konseptual decouples data yang dilihat dari antarmuka pengguna kontrol melalui yang dilihat. Karena itu, komponen Swing kebanyakan terkait model (yang ditentukan dalam hal interface Jawa), dan programmer dapat menggunakan berbagai implementasi default atau memberikan mereka sendiri. Kerangka kerja ini menyediakan implementasi default interface model untuk semua komponen konkret. Penggunaan khas kerangka swing tidak memerlukan penciptaan model kustom, sebagai kerangka menyediakan satu set implementasi default yang transparan, secara default, yang berhubungan dengan kelas anak JComponent yang sesuai pada perpustakaan Swing. Secara umum, hanya komponen yang kompleks, seperti tabel, pohon dan kadang-kadang daftar, mungkin memerlukan implementasi model kustom sekitar spesifik aplikasi struktur data. Untuk mendapatkan rasa yang baik potensi bahwa arsitektur swing memungkinkan, pertimbangkan situasi hipotetis di mana model kustom untuk tabel dan daftar adalah pembungkus lebih DAO dan / atau jasa EJB ..
Biasanya, objek komponen swing model yang bertanggung jawab untuk menyediakan antarmuka yang ringkas kejadian terdefinisi dipecat, dan properti diakses untuk model data (konseptual) untuk digunakan oleh JComponent terkait. Mengingat bahwa pola MVC secara keseluruhan adalah pola hubungan objek loosely-coupled kolaboratif, model menyediakan sarana programatik untuk melampirkan pendengar acara ke objek model data. Biasanya, acara ini adalah model sentris (ex: sebuah "baris dimasukkan" acara dalam model tabel) dan dipetakan oleh spesialisasi JComponent menjadi peristiwa bermakna untuk komponen GUI.
Sebagai contoh, JTable memiliki model yang disebut TableModel yang menggambarkan sebuah antarmuka untuk bagaimana tabel akan mengakses data tabular. Sebuah implementasi standar ini beroperasi pada array dua dimensi.
Komponen pandangan Swing JComponent adalah objek yang digunakan untuk grafis "mewakili" kontrol GUI konseptual. Perbedaan dari Swing, sebagai kerangka kerja GUI, adalah ketergantungan pada kontrol GUI pemrograman-diberikan (sebagai lawan dari penggunaan kontrol host asli OS GUI). Sebelum Java 6 Update 10, perbedaan ini menjadi sumber komplikasi saat pencampuran kontrol AWT, yang menggunakan kontrol asli, dengan kontrol swing dalam GUI (lihat Mencampur komponen AWT dan Swing).
Akhirnya, dalam hal komposisi visual dan manajemen, Swing nikmat layout relatif (yang menentukan hubungan posisional antara komponen) yang bertentangan dengan layout mutlak (yang menentukan lokasi yang tepat dan ukuran komponen). Ini bias terhadap "cairan" 'pemesanan visual adalah karena asal-usul dalam lingkungan operasi applet yang membingkai desain dan pengembangan GUI toolkit Jawa asli. (Konseptual, pandangan tentang manajemen tata letak sangat mirip dengan yang menginformasikan rendering konten HTML di browser, dan alamat set yang sama kekhawatiran yang memotivasi mantan.)







 


Hubungan dengan AWTAWT dan hirarki kelas swing
Sejak versi awal Java, sebagian dari Toolkit Jendela Abstrak (AWT) telah menyediakan platform-independen API untuk komponen antarmuka pengguna. Dalam AWT, setiap komponen diberikan dan dikontrol oleh komponen rekan asli khusus untuk sistem windowing yang mendasarinya.
Sebaliknya, komponen Swing sering digambarkan sebagai ringan karena mereka tidak memerlukan alokasi sumber daya asli di windowing toolkit sistem operasi. Komponen AWT disebut sebagai komponen kelas berat.
Sebagian besar API swing umumnya merupakan pelengkap dari ekstensi AWT, bukan pengganti langsung. Bahkan, setiap antarmuka swing ringan akhirnya ada dalam komponen AWT kelas berat karena semua top-level komponen di Swing (JApplet, JDialog, JFrame, dan JWindow) memperpanjang wadah tingkat atas AWT. Sebelum Java 6 Update 10, penggunaan komponen baik ringan dan kelas berat dalam jendela yang sama pada umumnya berkecil hati karena Z-order yang tidak kompatibel. Namun, kemudian versi Jawa telah tetap masalah ini, dan kedua Swing dan komponen AWT sekarang dapat digunakan dalam satu GUI tanpa Z-order isu.
Rendering fungsionalitas inti yang digunakan oleh Ayunkan untuk menarik komponen ringan disediakan oleh Java 2D, bagian lain dari JFC.Hubungan dengan SWT
Widget Standar Toolkit (SWT) adalah toolkit bersaing awalnya dikembangkan oleh IBM dan sekarang dikelola oleh komunitas Eclipse. Pelaksanaan SWT memiliki lebih banyak kesamaan dengan komponen kelas berat dari AWT. Ini menganugerahkan manfaat seperti kesetiaan lebih akurat dengan windowing toolkit yang mendasari asli, pada biaya terhadap eksposur meningkat menjadi platform asli dalam model pemrograman.
Munculnya SWT telah menimbulkan banyak perpecahan di antara pengembang Java desktop, dengan banyak sangat menguntungkan baik SWT atau Swing.
Ada perdebatan yang signifikan dan spekulasi tentang kinerja SWT vs swing, beberapa mengisyaratkan bahwa ketergantungan berat SWT pada JNI akan membuatnya lebih lambat bila komponen GUI dan Jawa perlu berkomunikasi data, tapi lebih cepat di render ketika data model di-load ke dalam GUI, namun hal ini belum dikonfirmasi dengan cara baik. [4] Satu set cukup menyeluruh dari benchmark tahun 2005 menyimpulkan bahwa baik swing atau SWT jelas mengungguli yang lain dalam kasus umum. [5]
SWT dianggap oleh beberapa menjadi kurang efektif sebagai teknologi untuk cross-platform pengembangan [siapa?]. Dengan menggunakan fitur tingkat tinggi dari masing-masing toolkit windowing asli, mereka mengklaim bahwa SWT kembali ke masalah terlihat pada pertengahan tahun 1990 (dengan toolkit seperti Zapp, Seng, XVT dan IBM / Smalltalk) di mana toolkit berusaha untuk menutupi perbedaan perilaku fokus, peristiwa yang memicu dan tata letak grafis [kutipan diperlukan]. Kegagalan untuk mencocokkan perilaku pada setiap platform dapat menyebabkan halus namun sulit-untuk-mengatasi bug yang mempengaruhi interaksi pengguna dan munculnya GUI.
Berikut ini adalah program Swing berbasis agak sederhana. Ini menampilkan jendela (sebuah JFrame) yang berisi label dan tombol.
Perhatikan bagaimana semua Instansiasi dan penanganan semua komponen Swing dilakukan pada Thread Dispatch Acara oleh penggunaan EventQueue.invokeLater metode (Runnable)) pada sebuah instance dari kelas, yaitu kelas Runnable, diciptakan dalam metode utama (lihat Swing dan benang pengaman).

0 komentar:

Inner Class dan Anonymous Inner Class

Bagian ini memberi Anda tinjauan ulang atas konsep yang sudah Anda pelajari di
pelajaran pemrograman pertama. Inner class dan anonymous inner class sangatlah
bermanfaat untuk GUI event handling.

Inner Class

Inner class, seperti namanya, adalah sebuah class yang dideklarasikan di dalam class
lain. Kegunaan inner classes akan dapat membantu Anda menyederhanakan program,
terutama dalam event handling seperti yang ditunjukkan pada contoh.

Contoh Menutup Window

import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
Label label;
CloseFrame(String title) {
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new CFListener());
}
void launchFrame() {
setSize(300,300);
setVisible(true);
}
class CFListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(1);
}
}
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window
Example");
cf.launchFrame();
}
}

Anonymous Inner Class


Anonymous inner class adalah inner class tanpa nama. Kegunaan dari anonymous inner
class akan menyederhanakan kode-kode Anda lebih lanjut. Di bawah ini merupakan
modifikasi dari contoh bagian sebelumnya.


Contoh Menutup Window


import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
Label label;
CloseFrame(String title) {
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
dispose();
System.exit(1);
}
});
}
void launchFrame() {
setSize(300,300);
setVisible(true);
}
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example");
cf.launchFrame();
}
}

0 komentar:

GUI Event Handling

Delegation Event Model

Delegasi event model menguraikan bagaimana program Anda dapat merespon interaksi
dari user. Untuk memahami model, pertama-tama mari kita pelajari melalui tiga
komponen utamanya.
1. Event Source
Event source mengacu pada komponen GUI yang meng-generate event. Sebagai
contoh, jika user menekan tombol, event source dalam hal ini adalah tombol.
2. Event Listener/Handler
Event listener menerima berita dari event-event dan proses-proses interaksi user.
Ketika tombol ditekan, listener akan mengendalikan dengan menampilkan sebuah
informasi yang berguna untuk user.
3. Event Object
Ketika sebuah event terjadi (misal, ketika user berinteraksi dengan komponen GUI),
sebuah object event diciptakan. Object berisi semua informasi yang perlu tentang
event yang telah terjadi. Informasi meliputi tipe dari event yang telah terjadi, seperti
ketika mouse telah di-klik. Ada beberapa class event untuk kategori yang berbeda
dari user action. Sebuah event object mempunyai tipe data mengenai salah satu dari
class ini.

Pada awalnya, sebuah listener seharusnya diregistrasikan dengan sebuah source
sehingga dapat menerima informasi tentang event-event yang terjadi pada source
tersebut. Hanya listener yang sudah teregistrasi yang dapat menerima pemberitahuan
event-event. Ketika telah teregistrasi, sebuah listener hanya tinggal menunggu sampai
event terjadi.
Ketika sesuatu terjadi dengan event source, sebuah event object akan menguraikan
event yang diciptakan. Event kemudian ditembak oleh source pada listener yang
teregistrasi.
Saat listener menerima sebuah event object (pemberitahuan) dari source, dia akan
bekerja. Menerjemahkan pemberitahuan dan memproses event yang terjadi.

Registrasi Listeners

Event source mendaftarkan sebuah listener melalui method add<Type>Listener.
void add<Type>Listener(<Type>Listener listenerObj)
<Type> tergantung pada tipe dari event source. Dapat berupa Key, Mouse, Focus,
Component, Action dan lainnya.
Beberapa listeners dapat diregistrasi dengan satu event source untuk menerima
pemberitahuan event.
Listener yang telah teregistrasi dapat juga tidak diregistrasikan lagi menggunakan
method remove<Type>Listener.
void remove<Type>Listener(<Type>Listener listenerObj)


Petunjuk untuk Menciptakan Aplikasi Handling GUI Events

Berikut ini langkah-langkah yang Anda butuhkan untuk mengingat ketika ingin membuat
aplikasi GUI dengan event handling.
1. Buatlah sebuah class yang menguraikan dan membuat suatu tampilan dari aplikasi
GUI Anda.
2. Buatlah sebuah class yang menerapkan interface listener yang sesuai. Class ini boleh
mengacu pada class yang sama seperti pada langkah awal.
3. Dalam menerapkan class, gunakan semua method-method dengan interface listener
yang sesuai. Uraikan masing-masing method bagaimana Anda ingin mengendalikan
event-event. Anda dapat memberikan implementasi kosong untuk method yang tidak
ingin Anda gunakan.
4. Daftarkan object listener, instansiatiate dari class listener pada langkah 2, dengan
source component menggunakan method add<Type>Listener.

0 komentar:

Konsep Stream I/O


KONSEP DASAR

Stream adalah suatu abstraksi untuk input dan output ( tidak peduli dari mana input berasak atau kemana output akan pergi )

PACKAGE java.io

Package java.io berisi kelas yang berhubungan dengan I/O di Java. Dibagi beberapa kelas yaitu :
1. Reader / Writer dan turunannya
2. Input Stream / Output Stream dan turunannya
3. I/O Network ( socket TCP/IP )
4. Exception

KELAS ABSTRAK PADA java.io

Ada 4 kelas abstrak dasar :
1. Reader
2. Writer
3. Input Stream
4. Output Stream
~ Reader dan Writer digunkana untuk data teks
~ Input Stream dan Output Stream digunakan untuk data biner

KELAS READER / WRITER

Kelas Reader / Writer bekerja pada stream teks ( bahasa apapun ). Disebut juga character stream. Karena menangani konversi teks Unicode secara otomatis. Dan jangan dipertukarkan dengan Input Stream / Output Stream secara sembarangan karena hasilnya bisa error.

DIAGRAM KELAS READER DAN TURUNANNYA


DIAGRAM KELAS WRITER DAN TURUNANNYA


KELAS INPUT STREAM / OUTPUT STREAM

Input Stream dan Output Stream digunakan untuk mengakses informasi non teks (biner). Disebut juga BYTE STREAM. Contoh data biner : File EXE, file GIF. Input Stream / Output Stream tidak menangani konversi teks Unicode secara otomatis.

DIAGRAM KELAS INPUTSTREAL DAN TURUNANNYA





DIAGRAM KELAS OUTPUTSTREAM DAN TURUNANNYA


INPUT DAN OUTPUT FILE

Gunakan FileInputStream dan FileOutputStream unutk membaca dan menulis file non teks. Dan gunakan FileReader / FileWriter untuk file teks
Stream dapat dikomposisi atau difilter atau dibungkus untuk menghasilkan stream yang lebih kompleks. Konsep ini mirip dengan pipe di Unix/Windows.
Contoh :
1. BufferedReader yang menyediakan readline()
2. PipedWriter/PipedReader yang mempipe suatu stream.
3. PrintStream/PrintWriter untuk menulis ke stream dengan mudah

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 input, 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);
}
}

0 komentar: