استفاده از JTable درجاوا

در این آموزش قصد دارم نحوه ایجاد جدول با استفاده از یک Table Model را شرح دهم.

همانطور که در قسمت قبلی شرح داده شد،به دو صورت می توان اطلاعات یک جدول را به JTable معرفی کرد. روش اول که استفاده آرایه ها بود توضیح داده شد. روش بعدی استفاده از Table Model است. در این روش باید کلاسی ایجاد کنیم که از کلاس AbstractTableModel ارث بری کند. و یک Object از این کلاس را به عنوان آرگمان ورودی به متد سازنده JTable دهیم.

کلاس AbstractTableModel یک کلاس Abstract است که دارای ۳ متد Abstract است که باید توسط ما پیاده سازی شود. این متد ها عبارتند از:

public int getRowCount()
public int getColumnCount()
public Object getValueAt(int rowIndex, int columnIndex)

 

برای ایجاد TableModel پیاده سازی این ۳ متد الزامی است. در این روش هم باید یک آرایه برای نام ستون ها و یک آرایه دو بعدی برای اطلاعات جدول تعریف کنیم و در سه متد گفته شده از آنها استفاده کنیم. پس کدهای برنامه تا اینجا شیبه کد زیر است:

df

حال وقت آن است که بدنه ی متد ها را پیاده سازی کنیم.

متد getRowCount تعداد سطر های جدول را بر می گرداند، پس باید از تعداد سطر های آرایه data استفاده کنیم. به شکل زیر:

hd

متد getColumnCount تعداد ستون های جدول را بر می گرداند، پسمی توانیم از طول آرایه col استفاده کنیم. به این شکل:

aq

متد دیگری به نام getColumnName وجود دارد که برای شاناساندن نام ستون ها به JTable استفاده می شود. وجود این متد الزامی نیست ولی اگر آن را پیاده سازی نکنیم نام ستون ها یا حروف a تا Z یا ترکیبی از آنها مشخص می شود. این یعنی اگر بخواهیم که نام ستون ها را خودمان تعیین کنیم باید این متد را که در کلاس AbstractTableModel قرار دارد Override کنیم.

شکل کلی این متد به این صورت است:

ring

برای پیاده سازی آن باید نام ستون خواسته شده را برگردانیم. به شکل زیر:

ae

متد getValueAt آدرس یک سلول از جدول را می گیرد و اطلاعات آن سلول را به صورت یک Object بر می گرداند. این Object میتواند هر نوعی باشد. این Object حتی میتواند از نوع کامپوننت ها باشد. اطلاعات ما در این مثال فقط از نوع String است. پس این متد را میتوانیم اینگونه پیاده سازی کینم:

zx

تا اینجا کارهایی که برای ساخت کلاس TableModel الزامی بود را انجام دادیم. البته میتوانیم متد های دیگری را هم که در کلاس AbstractTableModel وجود دارند را بسته به نیازمان Override کنیم. مثلا متد setValueAt یا متد getColumnClass یا متد isCellEditable که قصد دارم آموزش این متد ها را در یک قسمت به صورت جداگانه قرار دهم.

حال برای اینکه بتوانیم از کلاس TableModel استفاده کنیم باید یک JTable ایجاد کنیم و یک Object از نوع کلاس TableModel را به سازنده ی سازنده ی JTable پاس دهیم. به صورت زیر:

we

و در ادامه باید باید table را به Jframe اضافه کنیم(add کنیم) و JFrame را نمایش دهیم. که این کار در قسمت قبل توضیح داده شد.

کد کامل برنامه در زیر آورده شده است:

get

demo