Inner Class dan Keyword this


Salah satu bagian dimana aku harus sering memakai inner class adalah saat merancang tampilan user interface aplikasi melalui Swing. Jika berbicara mengenai inner class, ada sebuah syntax sederhana tetapi sangat membantu yang berkaitan dengan this.

Sebagai contoh, misalnya aku memiliki JFrame sederhana seperti berikut:

public class MainGUI extends JFrame {

	public MainGUI() {
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowHandler());

		...

		pack();
		setVisible(true);
	}

	protected class WindowHandler extends WindowAdapter {

		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}

	}
}

Pada program di atas, aku membuat sebuah inner class WindowHandler yang berfungsi sebagai WindowListener. Seandainya aku memiliki menu Exit di tampilan, atau sebuah tombol yang berfungsi untuk keluar dari program, tentu aku akan membuat Action yang akan dipakai oleh menu/tombol tersebut sehingga struktur program menjadi:

public class MainGUI extends JFrame {

	public MainGUI() {
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowHandler());
		JMenuItem menuFileExit = new JMenuItem(new ExitHandler());

		...

		pack();
		setVisible(true);
	}

	protected class WindowHandler extends WindowAdapter {

		@Override
		public void windowClosing(WindowEvent e) {
			logger.debug("Frame is closing");
			System.exit(0);

		}

	}

	protected class ExitHandler extends AbstractAction {

		@Override
		public void actionPerformed(ActionEvent e) {
			....
		}
	}
}

Sekarang, aku akan men-coding bagian actionPerformed dari class ExitHandler yang merupakan inner class dari class MainGUI. Aku ingin ia nantinya akan memanggil windowClosing milik WindowHandler. Seharusnya tidak susah, karena aku membuat kode seperti:

item.windowClosing(new WindowEvent(..., WindowEvent.WINDOW_CLOSING));

Parameter pertama dari construct WindowEvent adalah sebuah Window, dalam kasus aku adalah JFrame (yang masih turunan dari Window). Bagaimana aku bisa mendapatkan JFrame MainGUI? Soalnya aku sekarang berada di inner class ExitHandler. Jika aku menkode seperti:

item.windowClosing(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

Yang dimaksud dengan this disini adalah instance class saat ini yaitu ExitHandler. Tentunya hasilnya adalah kesalahan. Lalu bagaimana mendapatkan instance dari outer class, MainGUI? Aku bisa menkode seperti:

item.windowClosing(new WindowEvent(MainGUI.this, WindowEvent.WINDOW_CLOSING));

Perihal Solid Snake
I'm nothing...

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: