Anda di halaman 1dari 11

Kelompok Anggota

Kelas Mata Kuliah Hari, tanggal

7 1. Ahmad Fadel K (121511001) 2. Muhammad Dimas Dewantara (121511020) 3. Muhammad Taufiq Ismail (121511021) 4. Rizki Pratama (121511027) 2A D3 TI JTK Pengembangan Perangkat Lunak 1 (TE) 2/4/2014

Rangkuman Javanotes 6 Chapter 13 Advanced GUI Programming

Section 1: Images and Resources (Gambar dan Sumberdaya) 1. Images dan BufferedImages Di Java, ada class khusus yang menangani pengolahan gambar (image processing) pada memori komputer, yaitu class java.awt.Image. Ada dua jenis berbeda secara mendasar dari class tersebut. Yang satu merepresentasikan gambar yang dibaca dari sumber di luar program, seperti dari file di hard disk atau dari koneksi jaringan Internet. Yang kedua, gambar dibuat oleh program. Statement g.drawImage(img, area segi empat di komponen.
x, y, this);

akan menggambarkan gambar img ke

Tidak selamanya method g.drawImage menggambarkan gambar ke layar dengan seketika. Terdapat kemungkinan bahwa gambar belum lengkap saat method ini dipanggil; ini bisa terjadi, misalnya, jika gambar perlu dibaca dari sebuah file. Dalam hal ini, g.drawImage() menginisiasi penggambaran gambar tersebut dan me-return-nya segera. Lalu potongan-potongan gambar digambar, secara tidak bersamaan (asinkron) setelah tiaptiap potongannya tersedia. Namun, bagaimana gambar tersebut digambar? Perhatikan parameter ke-4 di method drawImage, parameter itu adalah ImageObserver. Sistem akan memberitahu ImageObserver ketika potongan-potongan gambar telah tersedia untuk digambar, dan potongan-potongan gambar tersebut akan muncul di layar. 2. Pixel Salah satu alasan yang baik untuk menggunakan BufferedImage adalah bahwa class tersebut memudahkan akses ke warna-warna di setiap pixel. Jika image bertipe BufferedImage, maka berikut method yang bisa digunakan:
image.getRGB(x,y) -- me-return value integer yang mengkodekan warna pada pixel di

koordinat (x,y)

image.setRGB(x,y,rgb) -- mengeset warna pada pixel di koordinat (x,y) menjadi

warna yang dikodekan oleh rgb. Statement Color c = new Color (image.getRGB(x,y)); dapat digunakan untuk mendapatkan warna pixel di koordinat (x,y) sebagai sebuah value bertipe Color. Dan jika c bertipe Color, kita bisa mengeset sebuah warna pada pixel menjadi warna tersebut dengan Image.setRGB(x, y, c.getRGB());. Komponen merah (red), hijau (green), dan biru (blue) dari suatu warna direpresentasikan sebagai sebuah value integer 8-bit, dengan range 0 sampai 255. 3. Resources (sumber daya) Resources merupakan data-data bertipe citra, suara, teks, dan lainnya. File resource tersebut merupakan bagian dari program, jika program membutuhkan file tersebut agar program bisa berjalan. Resources biasanya disimpan di file yang berada di lokasi yang sama dengan file class yang di-compile yang digunakan oleh program. File class di-load oleh sesuatu yang disebut class loader, yang direpresentasikan di Java oleh objek bertipe ClassLoader. Class loader memiliki daftar lokasi-lokasi yang akan mencari file-file class. Daftar ini disebut class path. 4. Kursor dan ikon Cursor merupakan gambar kecil di layar komputer yang merepresentasikan posisi kursor mouse. Di Java, cursor direpresentasikan oleh objek bertipe java.awt.Cursors. Sebuah Cursor memiliki gambar yang terkait, juga hot spot, yaitu sebuah Point yang menspesifikasikan pixel dalam gambar yang sesuai dengan posisi tepat di mana mouse sedang menunjuk di layar. cursor sendiri dengan memanggil method static createCustomCursor() di class Toolkit: Cursor c = Toolkit.getDefaultToolkit ().createCustomCursor(image, hotSpot, name); di mana hotSpot bertipe Point dan name adalah String yang menspesifikasikan nama cursor. Kita bisa membuat 5. Image File Input/Output Kita bisa menyimpan gambar dari program menjadi file dan membaca gambar dari file ke program dengan class javax.imageio.ImageIO. Java mendukung 3 format gambar standar: PNG, JPEG, dan GIF. a. Menyimpan gambar (write) Kita bisa menyimpan gambar ke file dengan memanggil method static di class ImageIO: ImageIO.write(image, format, file), di mana image bertipe BufferedImage, format adalah String yang menspesifikasikan format file gambar, dan file adalah File yang menspesifikasikan file yang akan ditulis. Method tersebut mereturn value boolean false jika format gambar format tidak didukung.

b. Membaca gambar (read) Class ImageIO juga mempunyai method static read() untuk membaca gambar dari file ke program. Method ImageIO.read(inputFile) menggunakan variabel inputFile bertipe File sebagai parameter dan me-return sebuah BufferedImage. Method me-return value null jika file tidak mengandung gambar yang disimpan dengan format yang didukung.

Section 2: Fancier Graphics (Grafis yang Lebih Menarik) Graphics2D merupakan subclass dari Graphics dimana ketika memperoleh konteks Graphics untuk menggambar baik dari Swing component atau BufferedImage objek grafis sebenarnya adalah tipe Graphics2D. 1. Mengukur sebuah Teks Sangat penting ketika kita mengetahui berapa ukuran string yang akan kita buat. Untuk mengetahui ukuran dari sebuah string, Java menyediakan standard class yang dinamakan java.awt.FontMetrics. Dalam memahami bagaimana sebuah ukuran string ditentukan, maka diberikan ilustrasi sebagai berikut:

Gambar

Ilustrasi pengukuran string

Dilihat dari gambar diatas, ada garis putus putus yang disebut baseline dan empat komponen yang tersusun dalam string, yaitu Ascent, Descent, Leading, dan Lineheight. Ascent menunjukkan tinggi dari string, Descent tinggi yang overlap dari karakter string yang tersusun seperti contoh huruf g. Lineheight yaitu jarak antara dua baseline dan Leading merupakan spasi antara dua string. Untuk representasi di Java menggunakan class Font yaitu FontMetric. 2. Transparency Warna direpresentasikan dengan komponen merah, biru, dan hijau dimana dalam representasi di Java dengan 32-bit paket dan hanya dihitung 24-bit dalam integer. Sisa 8bit digunakan kedalam komponen ke-empat yang disebut alpha component atau transparency. Transparency berarti memberikan warna baru kedalam background yang

telah ada, bukan full-obscure dimana terjadi pencampuran antara background image dan transparent color. Opaqueness kebalikan dari transparency, yang akan me-replace background image yang ada dengan full-opaque. 3. Antialiasing Ada permasalahan muncul ketika memberi warna piksel terhadap line atau lingkaran. Pixel merupakan kotak - kotak yang kecil dan ketika memberi warna piksel pada lingkaran akan ada didalam dan diluar lingkaran. Solusi yang mungkin bisa dilakukan yaitu memberi warna piksel sebesar 50% atau lebih. Ini dikenal dengan sebutan aliasing. Menggunakan solusi ini akan terlihat jelas bahwa lingkaran akan muncul bergerigi (jaggedness) disekitar lengkungannya. Ada teknik yang bisa untuk menghilangkan jaggedness tersebut yaitu antialiasing. Antialiasing berdasarkan pada transparency dan sangat simple dalam menggunakan teknik ini, tergantung seberapa dalam warna piksel ke bentuk geometri, sebagai contoh jika 75% geometri diberi warna piksel, maka 25% gunakan transparency.

Section 3: Actions and Buttons (Aksi dan Tombol) Button adalah satu di antara komponen GUI yang simpel. Namun ternyata itu tidak sesimpel yang kita bayangkan. Fungsional dasar button di Java didefinisikan oleh class javax.swing.AbstractButton. Subclass dari class tersebut merepresentasikan push button, check box, dan radio button. Menu item juga dianggap sebagai button. 1. Action dan AbstractAction Kita bisa menambahkan aksi ke button. Jika kita telah membuat button dengan constructor public JButton(String text); , di mana text menspesifikasikan teks yang muncul di button, maka kita bisa menambahkan ActionListener ke button ini agar button merespon ketika kita menekan button tersebut. Cara lain untuk membuat JButton adalah menggunakan Action. Action biasanya didefinisikan menggunakan class AbstractAction, class abstract yang memasukkan method public void actionPerformed (ActionEvent evt). Setelah kita membuat Action, kita bisa menggunakannya di dalam constructor button, sebagai contoh JButton clearButton = new JButton (clearAction); akan membuat button clearButton dengan nama action dari clearAction digunakan sebagai teks dari button tersebut, dan properti button lainnya diambil dari properti action. 2. Icon di Button Button juga bisa menggunakan icon. Icon direpresentasikan oleh interface Icon dan biasanya dibuat sebagai ImageIcons. Sebagai contoh, jika kita telah membuat Icon dengan statement Icon clearIcon = new ImageIcon(image); , di mana image bertipe BufferedImage, maka statement JButton

clearButton = new JButton(Clear the display, clearIcon);

akan membuat button clearButton dengan teks Clear the display dan menggunakan clearIcon sebagai icon button tersebut.

Gambar 3. Radio Button

Button dengan teks Clear the display

Di Java, radio button direpresentasikan oleh objek bertipe JRadioButton. Untuk membuat grup JRadioButton, kita harus membuat satu objek bertipe ButtonGroup untuk menyusun setiap radio button ke satu grup. Statement
JRadioButton redRadio, blueRadio, greenRadio, blackRadio; ButtonGroup colorGroup = new ButtonGroup(); redRadio = new JRadioButton("Red"); colorGroup.add(redRadio); blueRadio = new JRadioButton("Blue"); colorGroup.add(blueRadio); greenRadio = new JRadioButton("Green"); colorGroup.add(greenRadio); blackRadio = new JRadioButton("Black"); colorGroup.add(blackRadio); redRadio.setSelected(true); // Make an initial selection.

membuat grup button colorGroup yang memuat radio button redRadio, blueRadio, greenRadio, blackRadio, dengan seleksi awal pada radio button redRadio.

Gambar 4. Toolbar

Grup radio button yang ditempatkan di dalam container

Di Java Swing, toolbar direpresentasikan oleh class JToolBar. JToolBar bisa memuat komponen yang lain seperti JTextFileds dan JLabels. 5. Keyboard Accelerator Kebanyakan program sekarang menggunakan keystroke sebagai shortcut untuk menjalankan perintah di menu. Misalkan untuk perintah Save keystroke yang digunakan adalah Ctrl + S. Keystroke ini disebut dengan akselerator. Class javax.swing.KeyStroke digunakan untuk merepresentasikan keystroke yang bisa ditekan oleh user. Untuk menambahkan akselerator ke suatu objek, sebagai contoh objek saveCommand yang bertipe JMenuItem, maka statement yang digunakan adalah
saveCommand.setAccelerator( KeyStroke.getKeyStroke(ctrl S) );

6. HTML di Button Kita bisa menggunakan HTML sebagai konten di objek JButton. Cukup dengan menambahkan tag <html> di dalam String yang digunakan sebagai parameter di JButton, sebagai contoh, statement JButton button = new JButton("<html><center>This button has<br>two lines of text</center></html>"); membuat button yang menampilkan dua baris teks rata tengah. Kita juga bisa menerapkan tag yang lain, misalkan untuk memiringkan teks dengan menyisipkan teks di antara <i> dan </i>, atau <b> dan </b> untuk menebalkan teks.

Gambar

Contoh button dengan teks berisi tag HTML.


JButton javaButton = new

Gambar di atas adalah button yang dibuat dari


color=red>coffee</font>." );

JButton( "<html><b>Now</b> is the time for<br>" + "a nice cup of <font

dengan icon yang telah didefinisikan sebelumnya.

Section 4: Complex Components and MVC (Komponen Kompleks dan MVC) Pada sesi ini akan dipelajari complex components yang berada pada Swing. Complex components ini mendukung dalam hal tampilan dan manipulasi list, tabel, dan dokumen berupa teks. Dalam penggunaannya yang efektif, maka terlebih dahulu kita harus mengetahui apa itu Model-View-Controller (MVC). 1. Model-View-Controller

Satu aplikasi yang menjalankan prinsip division of responsibilities kedalam sebuah desain GUI disebut Model-View-Controller (MVC) pattern. Ketika MVC pattern diterapkan dalam komponen, maka model terdiri atas data yang merepresentasikan keadaan komponen sekarang. View merupakan presentasi visual komponen ke dalam screen dan controller aspek komponen yang membawa actions dalam respon ke events dihasilkan oleh user. MVC pattern memiliki banyak tempat dalam Swing design seperti ButtonModel, ButtonGroup, JButton. 2. List dan ListModels JList adalah komponen yang merepresentasikan kumpulan item yang dapat dipilih oleh user. Dibawah ini contoh ketika JList, iconlist yang telah ditambahkan pada scroll pane dengan single command:
add( new JScrollPane(iconList), BorderLayout.EAST );

List yang kita lihat pada screen hanya aspek view pada list. Controller terdiri atas listener objects yang merespon ketika user mengklik item pada list. Untuk modelnya, JList menggunakan tipe objek ListModels. Ketika ingin menambah sebuah item pada list dan menghapus item dalam list harus memiliki listmodel yang berbeda dimana dalam Java terdapat class bernama DefaultListModel yang mendukung kemampuan tersebut. Untuk JList yang memiliki kemampuan memodifikasi, tambahkan DefaultListModel. 3. Table dan TableModels JTable seperti halnya dengan JList yaitu menampilkan item kepada user. Hanya saja perbedaannya bahwa tabel lebih kompleks dimana setiap tabel yang didefiniskan memiliki sebuah grid baris dan kolom. Setiap posisi grid dinamakan cell. Salah satu contoh pembuatan tabel dengan nama kolom State dan Capital City:
String[][] statesAndCapitals = new String[][] { { "Alabama", "Montgomery" }, { "Alaska", "Juneau" }, { "Arizona", "Phoenix" }, . . . { "Wisconsin", "Madison" }, { "Wyoming", "Cheyenne" } }; String[] columnHeads = new String[] { "State", "Capital City" }; JTable table = new JTable(statesAndCapitals, columnHeads);

Secara default settings, tabel bisa diedit akan tetapi tidak bisa sesuai secara keseluruhan. Maka dari itu JTable menggunakan tipe objek TableModel untuk menyimpan konten tabel dan juga bertanggung jawab apakah tabel bisa diedit atau tidak. Untuk membuat cell tidak bisa diedit, harus menggunakan sebuah model lain yaitu subclass DefaultTableModel yang memiliki banyak method yang dapat digunakan untuk memodifikasi tabel seperti

setValueAt(item, rowNum, colNum), removeRow(rowNum), addRow(itemArray).

Untuk subclass dari TableModel dapat didefiniskan menggunakan AbstractTableModel yang bebas dalam merepresentasikan tabel data yang kita inginkan. 4. Documents and Editor JEditorPane, merupakan sebuah subclass dari JTextComponent yang berfungsi sebagai pengatur tampilan teks(misal bold dan italic). JEditorPane dapat menangani file bertipe .rtf, .html, dan file berkonten text/plain. Untuk melakukan passing URL dalam JEditorPane, diperlukan metode .setPage(url), dimana url di dalam method tersebut merupakan alamat halaman yang ditunjuk. Pada saat mempasing url, tak sepenuhnya hal itu ditangani oleh JEditorPane namun, ada sebuah event yang ikut andil dalam proses tersebut yaitu event bertipe HyperLinkEvent yang dapat melayani perpindahan alamat yang ditunjuk. Konsep model dalam JTextComponent adalah sebuah objek bertipe Document. Untuk penambahan perubahan, cukup ditambahkan sebuah lisstener, bertipe DocumentListener. Untuk melakukan pembacaan pun, DocumentListener mempunyai method tersendiri untuk membaca file bertipe tersebut. 5. Custom Components Java menyediakan semua komponen standar yang biasanya dibutuhkan oleh semua orang yang menggunakan Java. Namun, kita pun dapat membuat komponen kita sendiri dengan menjadikannya sebuah subclass dari class yang telah ada dengan tujuan tertentu yang bergantung pada keperluan kita sendiri. Komponen-komponen yang dibangun, bersifat tidak dapat berdiri sendiri, yang artinya, setiap komponen yang kita buat, pasti menjadikan class yang telah ada sebagai dasar pembuatan komponen yang akan kita buat sendiri. Secara otomatis, semua hal yang berhubungan dengan class yang menjadi sandaran dari komponen kita berperan sebagai subclass dari class yang kita ingin ambil method dan properti yang dimilikinya.

Section 5: Finishing Touches (Sentuhan Terakhir) 1. Set Mandelbrot Set Mandelbrot adalah satu set poin dalam bidang xy yang didefinisikan oleh prosedur komputasi. Untuk menggunakan program ini, semua benar-benar harus mengetahui bahwa himounan Mandelbrot dapat digunakan untuk membuat beberap gambar-gambar yang bagus. Tetapi dengan rincian matematika seperti contoh di bawah ini harus pertimbangkan titik yang memiliki koordinat real nomor (a,b) dan menerapkan perhitungan berikut :

x = a; y = b; count = 0; while ( x*x + y*y < 4.1 ) { count++; if (count > maxIterations) break; double newX = x*x - y*y + a; double newY = 2*x*y + b; x = newY; y = newY; }

Setelah sistem pengulangan ini berakhir, jika jumlah kurang dari atau sama dengan maxIterations, kita dapat mengatakan bahwa (a, b) tidak di set Mandelbrot. Jika jumlah lebih besar dari maxIterations, maka (a, b) mungkin atau mungkin tidak di set Mandelbrot, tapi maxIterations yang lebih besar, semakin besar kemungkinan bahwa (a, b) sebenarnya di set. Untuk membuat gambar dari prosedur ini, dapat digunakan kotak persegi dari pixel untuk mewakili beberapa persegi panjang pada bidang tersebut. Setiap pixel sesuai dengan beberapa koordinat bilangan real (a,b), lalu gunakan koordinat pusat pixel dan jalankan loop diatas untuk setiap pixel. Jika maxletartions dihitung dan berlangsung melewati warna pixel hitam. Ini merupakan titik yang mungkin ada pada set Mandelbrot. Jika tidak, dasar warna pixel pada nilai hitungan setelah loop berakhir akan menggunakan warna yang berbeda. Dalam hal hal tertentu , semakin tinggi menghitung akan semakin dekat intinya adalah untuk set Mandelbrot , sehingga warna dapat memberikan beberapa informasi tentang poin diluar set Mandelbrot dan tentang bentuk Mandelbrot. Berikut adalah gambar yang dihasilkan oleh program Mandelbrot viewer menggunakan perhitungan ini, dan daerah hitam adalah himpunan Mandelbrot:

Gambar 2. Rancangan Program

Mandelbrot set

Karya komputasi dan menampilkan gambar dari himpunan Mandelbrot dilakukan di MandelbrotDisplay.java. Class MandelbrotDisplay adalah subclass dari JPanel. Ini menggunakan kanvas off - layar untuk memegang salinan gambar. Kemudian , jika pengguna menggambar " zoom kotak " dengan mouse , kotak zoom digambar di atas

gambar . Selain gambar , kelas menggunakan array dua dimensi untuk menyimpan jumlah iterasi untuk setiap pixel dalam gambar . Jika kisaran xy - nilai berubah , atau jika ukuran perubahan jendela , semua jumlah harus menghitung ulang . Karena perhitungan dapat berlangsung cukup lama , itu tidak akan diterima untuk memblokir user interface sementara perhitungan sedang dilakukan. File MandelbrotPanel.java mendefinisikan panel utama dari jendela Mandelbrot Viewer. MandelbrotPanel adalah subclass lain dari JPanel. Kebanyakan MandelbrotPanel kebanyakan diisi dengan MandelbrotDispalay dan juga ditambakan JLabel bawah Layar. JLabel digunakan sebagai status bar yang menunjukkan beberapa informasi yang mungkin menarik. Menu bar untuk program ini didefinisikan dalam Menus.java . Perintah di " File" dan "Control " menu didefinisikan sebagai Actions. Satu hal yang menarik adalah bahwa isi dari menu bar yang berbeda , tergantung pada apakah program yang sedang dijalankan sebagai applet atau sebagai aplikasi yang berdiri sendiri . Karena applet tidak dapat mengakses sistem file , tidak ada menu "File" untuk applet . Selain itu , tombol akselerator umumnya tidak fungsional dalam sebuah applet yang berjalan pada sebuah halaman web , sehingga kunci akselerator hanya ditambahkan ke item menu jika program yang sedang dijalankan di jendela sendiri. Dalam mencapai hal ini, konstruktor kelas menu memiliki parameter yang memberitahu menu bar apakah yang akan digunakan oleh applet dan apakah itu akan digunakan dalam bingkai. 3. Internasionalisasi Internasionalisasi mengacu pada menulis sebuah program yang mudah beradaptasi untuk menjalankan di berbagai belahan dunia. Ide utama adalah bahwa string yang akan disajikan kepada pengguna tidak harus dikodekan ke dalam kode sumber program. Maka program harus dikompilasi ulang . Dalam program internasionalisasi benar , semua string disimpan bersama dalam satu atau lebih file yang terpisah dari kode sumber,di mana mereka dapat dengan mudah ditemukan dan diterjemahkan. Untuk mewujudkan gagasan ini, string disimpan dalam satu atau lebih properti file. Tidak ada spasi dalam string kunci atau sebelum tanda sama . Nilai string dapat berisi spasi atau karakter lain . Jika garis diakhiri dengan backslash ("\") , string value dilanjutkan pada baris berikutnya , dalam hal ini , ruang-ruang di awal baris yang diabaikan . Satu detail disayangkan adalah bahwa file properti dapat berisi karakter ASCII hanya polos . Karakter ASCII ditetapkan hanya mendukung abjad Inggris . Misalkan program ingin menyajikan string kepada pengguna ( sebagai nama perintah menu , misalnya) . File properti akan berisi pasangan kunci / nilai seperti : menu.saveimage = Simpan Gambar PNG ... 4. Peristiwa, Peristiwa, Peristiwa

Peristiwa-peristiwa yang digunakan untuk komunikasi, class MandelbrotDisplay tidak kuat digabungkan ke kelas-kelas lain . Bahkan, hal itu dapat digunakan dalam program lain tanpa modifikasi apapun dan tanpa akses ke kelas-kelas lain . Alternatif untuk menggunakan peristiwa akan memiliki metode tampilan objek panggilan seperti displaySizeChanged() atau computationStarted() di MandelbrotPanel dan MandelbrotFrame objek untuk memberitahu mereka apa yang terjadi di layar: Setiap programmer yang ingin menggunakan MandelbrotDisplay juga harus menggunakan dua kelas lain atau harus memodifikasi kelas layar sehingga tidak lagi mengacu pada kelaskelas lain . Program Mandelbrot Viewer menanggapi peristiwa mouse pada layar . Peristiwa ini dihasilkan oleh objek tampilan , tapi kelas display itu sendiri tidak peduli dengan peristiwa mouse dan tidak melakukan apa-apa dalam menanggapi mereka . Peristiwa mouse ditangani oleh pendengar di MandelbrotPanel , yang merespon mereka dengan zoom layar dan dengan menunjukkan koordinat mouse pada status bar. Semua komponen GUI Java adalah kacang-kacangan dan mampu memancarkan peristiwa perubahan properti. Dalam setiap subclass dari Component, hal ini dapat dilakukan hanya dengan memanggil metode
public void firePropertyChange (String propertyName, Obyek oldValue, Obyek newValue) Sebagai contoh, kelas MandelbrotDisplay menggunakan metode berikut untuk menetapkan status saat ini: private void setStatus (status String) { jika (status == this.status) { kembali; } String oldStatus = this.status; this.status = status; firePropertyChange (STATUS_PROPERTY, oldStatus, status); }

Saat menulis kelas kacang dari awal, Anda harus menambahkan dukungan untuk peristiwa perubahan properti, jika Anda membutuhkannya. Untuk membuat ini lebih mudah, package java.beans menyediakan kelas PropertyChangeSupport. 5. Custom Dialogs Java memiliki beberapa kotak dialog standar yang didefinisikan dalam kelas JOptionPane , JColorChooser , dan JFileChooser . Dialog dari semua jenis ini digunakan dalam program Mandelbrot Viewer . Namun, terkadang jenis dialog yang diperlukan . Dalam kasus tersebut, Anda dapat membangun sebuah kotak dialog kustom.

Anda mungkin juga menyukai