Menggunakan GlassPane pada Java Swing


GlassPane merupakan salah satu komponen yang sangat penting di  Java Swing, dimana letaknya ada diatas semua JRootPane dan mengisi semua view/panel. Maka, dengan keadaan tersebut, ada dua hal penting yang bisa kita manfaatkan dengan glassPane, yaitu

  1. Menghandle setiap mouse / keyboard event
  2. Menggambar  diatas view atau interface

Kalau diilustrasikan posisi glassPane terhadap komponen lain akan seperti ini (ilustrasi diambil dari dokumentasi Oracle)

Nah, point dua ini lah yang membedakannya dengan komponen yang  lain. Misalkan jika kita menggambar di button, maka area nya hanya terbatas di dalam tombol tersebut, namun dengan glassPane, semua batasan tersebut hilang, dan kita bisa menggambar diatas seluruh objek. Coba kita perhatikan ilustrasi di atas, glassPane berada paling atas dari semua komponen dari JFrame. Oleh karena itu, penting bagi kita untuk membuat glassPane yang transparan untuk tetap dapat melihat komponen yang ada dibawahnya.  Metode  paling mudah untuk membuat GlassPane dapat dilakukan seperti ini:


JFrame frame = new JFrame();
 frame.setGlassPane(new CustomGlassPane());
 // bla..bla
 frame.getGlassPane().setVisible(true);

Menggambar pada GlassPane

Untuk menggambar pada glassPane kita perlu membuat custom Component. Seperti yang telah saya singgung sebelumnya, karena nanti glassPane letaknya berada paling atas pada UI, maka kita akan membuat glassPane dimana user tetap dapat melihat konten didalamnya. Ada dua cara yang dapat kita gunakan yaitu melalui JCOmponent atau JPanel,masing-masing contoh nya dibawah ini


public class CustomGlassPane extends JComponent
{
 @Override
 protected void paintComponent(Graphics g) {
// proses draw
 }
}

Sedangkan teknik yang kedua menggunakan extend JPanel


public class CustomGlassPane extends JPanel {
  public CustomGlassPane() {
    setOpaque(false);
  }
  @Override
  protected void paintComponent(Graphics g) {
// proses draw
  }
}

Pada proses draw, kita dapat mengatur warna dari glassPane untuk menunjukkan glassPane aktif

Menon-aktifkan Input Events

Yang diharapkan dari glassPane tentu adalah ditampilkan secara berkala, dimana selama waktu tersebut glassPane harusnya menon-aktifkan segala jenis input user, baik dari mouse maupun dari keyboard, untuk melakukannya cukup mudah, tambahkan saja ke dalam konstruktor komponen glassPane yang kita buat seperti ini

        addMouseListener(new MouseAdapter() {});
        addMouseMotionListener(new MouseAdapter() {});
        addMouseWheelListener(new MouseAdapter() {});
        addKeyListener(new KeyAdapter() {});

Saya sertakan pula contoh project penggunaan glassPane sederhana, file dapat diunduh di Dropbox, tapi kalo yang  rada bagus dari Romain Guy (menggunakan library TimingFramework dan look and feel) dapat diunduh disini Semoga penjelasan yang cukup singkat ini bermanfaat buat teman-teman semuanya… 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s