ฉันจะสร้าง JTable
ที่เติมจากฐานข้อมูล Derby ด้วยการแบ่งหน้าและช่องทำเครื่องหมายควบคุม (ลบ / แก้ไขข้อมูล) ได้อย่างไร
ฉันรู้วิธีรับข้อมูลจากฐานข้อมูล:
public List<Customer> getDataOnPage(int pageIndex, int rowIndex)
{
List<Customer> dataOnPage = new ArrayList<>();
//...
while (rs.next())
{
Customer customer = new Customer();
customer.setId(rs.getInt(1);
customer.setName(rs.getString(2));
dataOnPage.add(customer);
}
//....
return dataOnPage;
}
สร้างคลาส AbstractTableModel
ที่กำหนดเองด้วยวิธีที่กำหนดเอง:
public class CustomerAbstractTableModel
{
List<Customer> data = new ArrayList<>();
public void setData(List<Customer> data)
{
this.data = data;
super.fireTableDataChanged();
}
// overriden getRowCount(), getColumnCount() and getValueAt(int rowIndex, int columnIndex)
}
และรวม AbstractTableModel
ที่กำหนดเองของฉันเข้ากับ AbstracTtableModel
อีกอัน เช่น ที่นี่ เพื่อให้มีคอลัมน์พร้อมช่องทำเครื่องหมาย
จากนั้นสร้างวิธีการในคลาสมุมมองของฉันที่แบ่งหน้าและถูกเรียกเมื่อคลิกปุ่ม (ในวิธี actionPerformed(ActionEvent e)
)
int pageIndex = 0;
private void paginate()
{
List<Customer> data = customerDao.getDataOnPage(pageIndex, 10);
customerWrapperAbstractTableModel.setData(data);
}
ปัญหาในการแก้ปัญหานี้คือเมื่อใดก็ตามที่ฉันเปลี่ยนหน้า (แบ่งหน้า) ฉันจะสูญเสียค่าในกล่องกาเครื่องหมาย เนื่องจากมีการตั้งค่าข้อมูลใหม่ ฉันจะแบ่งหน้าและเก็บค่าไว้ในช่องทำเครื่องหมายได้อย่างไร ตัวอย่างเช่น GMail มีคุณสมบัตินี้