Mengubah Ukuran Huruf Di Tabel Swing Secara Global Di Griffon


Bagi beberapa orang, tulisan di setiap baris JTable terlihat terlalu kecil. Sebagai contoh, saya membuat sebuah aplikasi Griffon lalu mengubah kode program view sehingga terlihat seperti berikut ini:

package groovyprojects

import javax.swing.table.DefaultTableModel

def dataTabel = new DefaultTableModel(
  [["Solid Snake", "70"],
   ["Liquid Snake", "80"],
   ["Big Boss", "90"]] as Object[][],
   ["Name", "Score"] as Object[])

application(title: 'Latihan',
  preferredSize: [800, 200],
  pack: true,
  locationByPlatform: true) {

    flowLayout()
    scrollPane() {
      table(model: dataTabel, preferredViewportSize: [200, 100])
    }
    scrollPane() {
      table(model: dataTabel, preferredViewportSize: [200, 100])
    }
    scrollPane() {
      table(model: dataTabel, preferredViewportSize: [200, 100])
    }
}

Kode program di atas akan membuat 3 buah tabel dengan data yang sama, dimana tampilannya akan terlihat seperti pada gambar berikut ini:

Tampilan Normal Tabel Di L&F Nimbus Di Windows

Tampilan Normal Tabel Di L&F Nimbus Di Windows

Pada sebuah aplikasi, terkadang akan ada sangat banyak tabel.   Bila saya memperbesar huruf di tabel dengan memakai TableCellRenderer, maka saya harus melakukan perubahan ini pada seluruh tabel yang ada.   Alternatif lain, saya membuat sebuah komponen baru yang diturunkan dari JTable.   Tapi ini membuat saya tidak bisa memakai node table() di view dan saya harus mendefinisikan node baru.

Lalu apa yang harus saya lakukan?   Saya harus melakukan perubahan secara global!   Hal ini membuat saya harus melakukan pengaturan Look & Feel (L&F).   Pada Swing, L&F menentukan tampilan & perilaku setiap komponen yang ada.   L&F dapat dianggap sebagai skin atau themes untuk Swing.   Karena Swing bersifat multiplatform,  maka L&F yang dipakai tidak harus sama dengan yang tampilan yang ada di sistem operasi.

Pada sistem operasi Windows, Griffon akan memakai L&F Nimbus.   Beruntungnya, Nimbus adalah L&F baru yang memungkinkan penggunanya untuk melakukan pengaturan tampilan, termasuk diantaranya mengubah Font untuk tabel.   Karena saya melakukan pengaturan di L&F, maka perubahan ini bersifat global untuk seluruh komponen Swing yang ada.   Anggap saja seperti melakukan pengaturan themes untuk blog, atau pengaturan CSS untuk HTML.

Saya harus meletakkan pengaturan L&F sebelum JFrame ditampilkan! Jadi, saya harus membuat kode program-nya dimana? Griffon menyediakan tempat untuk membuat kode program yang akan dipanggil pada siklus tertentu di aplikasi. Jika saya membuka folder griffon-app/lifecycle, saya akan menemukan file Initialize.groovy, Ready.groovy, Shutdown.groovy, Startup.groovy, dan Stop.groovy.

File Initialize.groovy akan dikerjakan sebelum tampilan dimunculkan. Bila saya buka, isi bawaannya adalah:

import groovy.swing.SwingBuilder
import static griffon.util.GriffonApplicationUtils.isMacOSX

SwingBuilder.lookAndFeel((isMacOSX ? 'system' : 'nimbus'), 'gtk', ['metal', [boldFonts: false]])

Walaupun Nimbus adalah L&F terbaru, Swing secara default tetap memakai L&F Metal yang terlihat seperti pada gambar berikut ini:

Tampilan L&F Metal Di Windows

Tampilan L&F Metal Di Windows

Kode program di Initialize.groovy bawaan Griffon akan mengubah L&F yang dipakai menjadi Nimbus bila aplikasi dijalankan di platform selain MacOS.

Untuk mengubah ukuran huruf di tabel, saya perlu mengubah property Table.font.   Saya juga perlu menyesuaikan jarak setiap baris dengan mengubah property Table.rowHeight.   Berikut ini adalah isi Initialize.groovy setelah perubahan yang saya lakukan:

import groovy.swing.SwingBuilder
import javax.swing.*
import javax.swing.plaf.FontUIResource
import java.awt.*
import static griffon.util.GriffonApplicationUtils.isMacOSX

SwingBuilder.lookAndFeel((isMacOSX ? 'system' : 'nimbus'), 'gtk', ['metal', [boldFonts: false]])
UIManager.put("Table.font", new FontUIResource(new Font("SansSerif", Font.PLAIN, 18)))
UIManager.put("Table.rowHeight", 30)

Sekarang, bila saya menjalankan program, saya akan memperoleh tampilan seperti pada gambar berikut ini:

Tampilan Tabel Setelah Perubahan L&F

Tampilan Tabel Setelah Perubahan L&F

Perhatikan bahwa saya tidak mengubah satu-pun kode program dari tiga bagian kode program yang membuat tabel.  Dengan melakukan pengaturan pada Look & Feel, seluruh tabel yang ada berubah sesuai dengan yang saya harapkan. Keuntungannya terlihat dengan jelas, saya tidak perlu mengubah pengaturan secara manual pada masing-masing JTable yang ada (secara manual, saya harus membuat implementasi TableCellRenderer, memanggil setCellRenderer, dan memanggil setRowHeight; lalu mengulangi ini untuk seluruh tabel yang ada!).

Perihal Solid Snake
I'm nothing...

2 Responses to Mengubah Ukuran Huruf Di Tabel Swing Secara Global Di Griffon

  1. As it turns out you _can_ use a custom JTable subclass with the table() node, for example

    table(new MyCustomJTable(), …) { /* columns */ }

    Most Siwngbuilder nodes accept a value. If that value turns out to be an instance of the appropriate class (or subclass) then the instance is used directly. You can of course register a new custom node in a View script name like this

    registerBeanFactory(‘customTable’, MyCustomJTable)

    this assumes the class provides a no-args constructor. If you need more control on how the class is instantiated then register a custom factory

    registerFactory(‘customTable’, new MyCustomJTableFactory())

    Cheers,
    Andres

    • Solid Snake mengatakan:

      Thanks for the tips. What I’m doing in this post depends on L&F and not all L&F supports ‘Table.rowHeight’ property. I forget that by using Griffon, I should be able to create & register custom JTable easily.

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: