Java – Menyisipkan Object ke JTable

Mengapa perlu menyisipkan object ke dalam JTable ?
Saya beri contoh kasus begini :
Anda punya Object Mahasiswa dengan properti Id dan Nama, Namun anda hanya harus menampilkan nama Mahasiswa di dalam JTable. Tentu hal ini bukan masalah buat anda, akan jadi masalah ketika anda harus tau Id Mahasiswa (biasanya digunakan dalam operasi update atau delete) dari row yang diselect di JTable.
Menyisipkan object ke dalam JTable hanya salah satu solusi dari banyak solusi yang bisa anda kerjakan.
Tentu saja anda bisa saja menggunakan solusi lain bila menurut anda itu lebih efektif.

Untuk menyisipkan object ke dalam JTable sebelumnya saya akan coba jelaskan sedikit prosesnya.
bahwa JTable akan me-render (manampilkan) String atau jika dia bukan String maka JTaable akan mencari method toString() yang berada dalam setiap Object.
Beda cerita ketika JTable mengambil value dari selected row atau biasa kita gunakan method getValueAt(row, column), JTable akan mengembalikan Object sebagai return-nya. hal ini memudahkan kita untuk membuat sedikit trik untuk menyisipkan object ke dalam JTable.

Screenshoot :

Langsung saja ke prakteknya :

Mahasiswa.java

package swing;

public class Mahasiswa {
	public int IdMahasiswa;
	public String NamaMahasiswa;

	public Mahasiswa() {

	}

	public int getIdMahasiswa() {
		return IdMahasiswa;
	}

	public void setIdMahasiswa(int idMahasiswa) {
		IdMahasiswa = idMahasiswa;
	}

	public String getNamaMahasiswa() {
		return NamaMahasiswa;
	}

	public void setNamaMahasiswa(String namaMahasiswa) {
		NamaMahasiswa = namaMahasiswa;
	}
	
	@Override
	public String toString() {
		
		return NamaMahasiswa;
	}

}

MainWindow.java

package swing;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;


public class MainWindow extends JFrame {

	private GradientPanel contentPane;
	private JTable table;
	private JButton btnNewButton;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MainWindow frame = new MainWindow();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public MainWindow() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new GradientPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		
		int[] ids = {5, 3, 6, 7, 8, 10};
		String[] strs = {"Suneo", "Sizuka", "Nobita", "Doraemon", "Giant", "Sinchan"};
		
		DefaultTableModel dtm = new DefaultTableModel(){
			@Override
			public boolean isCellEditable(int row, int column) {
				
				return false;
			}
		};

		dtm.addColumn("Nama Mahasiswa");	
		
		for (int i = 0; i < strs.length; i++) {			
			Object[] obj = new Object[1];
			
			Mahasiswa mhs = new Mahasiswa();			
			mhs.setIdMahasiswa(ids[i]);
			mhs.setNamaMahasiswa(strs[i]);
			
			obj[0] = mhs;		
			
			dtm.addRow(obj);
			
		}	
		
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.CENTER);
		panel.setLayout(new BorderLayout(0, 0));
		
		table = new JTable();
		JScrollPane scrollPane = new JScrollPane(table);
		
		table.setModel(dtm);
		
		panel.add(scrollPane, BorderLayout.CENTER);
		
		btnNewButton = new JButton("Get Id");
		
		btnNewButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int selectedRow = table.getSelectedRow();
				if(selectedRow != -1){
					Mahasiswa mhs = (Mahasiswa) table.getValueAt(selectedRow, 0);	
					
					JOptionPane.showMessageDialog(null, "Kamu memilih mahasiwa : \nNama : "+mhs.getNamaMahasiswa()+" \nId : "+mhs.getIdMahasiswa());
					
				}
			}
		});
		
		panel.add(btnNewButton, BorderLayout.NORTH);
	}

}

Saya coba jelaskan sedikit :

1. Saya membuat class Mahasiswa, yang perlu diperhatikan adalah saya meng-overide method toString() dengan return baru yaitu NamaMahasiswa.

	@Override
	public String toString() {
		
		return NamaMahasiswa;
	}

2. Saya membuat dua array ids dan strs, ids adalah array untuk IdMahasiswa sedangkan strs adalah array untuk NamaMahasiswa

	int[] ids = {5, 3, 6, 7, 8, 10};
	String[] strs = {"Suneo", "Sizuka", "Nobita", "Doraemon", "Giant", "Sinchan"};

3. Saya membuat DefaultTableModel untuk JTable untuk kemudian mengisinya dengan object Mahasiswa

DefaultTableModel dtm = new DefaultTableModel(){
			@Override
			public boolean isCellEditable(int row, int column) {
				
				return false;
			}
		};

		dtm.addColumn("Nama Mahasiswa");	
		
		for (int i = 0; i < strs.length; i++) {			
			Object[] obj = new Object[1];
			
			Mahasiswa mhs = new Mahasiswa();			
			mhs.setIdMahasiswa(ids[i]);
			mhs.setNamaMahasiswa(strs[i]);
			
			obj[0] = mhs;		
			
			dtm.addRow(obj);
			
		}	

4. Saya membuat JTable dan memasang model yang sudah dibuat

		table = new JTable();
		JScrollPane scrollPane = new JScrollPane(table);
		
		table.setModel(dtm);
		
		panel.add(scrollPane, BorderLayout.CENTER);

5. Terakhir menambahkan JButton untuk mengecek object yang telah kita buat di JTable

btnNewButton = new JButton("Get Id");
		
		btnNewButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int selectedRow = table.getSelectedRow();
				if(selectedRow != -1){
					Mahasiswa mhs = (Mahasiswa) table.getValueAt(selectedRow, 0);	
					
					JOptionPane.showMessageDialog(null, "Kamu memilih mahasiwa : \nNama : "+mhs.getNamaMahasiswa()+" \nId : "+mhs.getIdMahasiswa());
					
				}
			}
		});
		
		panel.add(btnNewButton, BorderLayout.NORTH);

Semoga bermanfaat,

mazipan-signature

Be a good reader, leave your comment please.