Mô hình bảng TableModel

Ờ trên ta đã xẻt trường hợp tạo lập một bảng đon giản, trong đó dữ liệu được tổ chức thành mảng hai chiều. Tuy nhiên, trong nhiều chương trình ứng dụng, ta không thể sử dụng cách này để tồ chức dữ liệu được mà phải tạo ra một mô hình hàng riêng.

Trong Java có lóp trừu tượng AbstractTableModel, trong đó có các phương thức:

public int getRowCount ( ) ;                 //Xác định số hàng

public int getColumnCount();                //Xác định số cột

public Object getValueAt ( int row, int column) ;//Xác đinh đối tuọng

Ví dụ 4.6. Xây dựng bàng thê hiện đuợc lợi nhuận đâu tư thu được hàng       năm  theo    tỳ lệ

%. Già sử vốn ban đầu là $100.000 và các tý        lệ  tăng trường hàng năm là  5%,  6%,  7%,   8%,

9% và 10%. Khi đó ta có bảng mô tả sự tăng trưởng của vốn đầu tư như hình 4.10 sau đây.

Phương thức getValuiĩAt ( ) tính giá trị ờ hàng r và cột c được viết như sau: public Object getValueAt(int r, int c){ double rate = (c + minRate) / 100.0; int nperiods = r;

double futureBalanca =INITAL_E y ANGE * Math, pew (1+rate, nperiods) ; return

NumberFormat.getCurre icy Instance ( ). format (futureBalance) ;

}

Tên các cột mặc định trong, Abstrc ctTableìlodel là A, B, c, v.v. Nếu muốn thay đổi tên gọi của chúng thì ta \ iết đè phuong thức getColumnName ( ) , vi dụ

public String ge¿ColumnKäme(int c){

double rate = (c r minRate) / 100.0;

return NumbecFormah.getPercentInstance!) . format (rate) ;

Chương trình xây dựng bảng thể hiện sự tàng trường vốn đầu tư được viết như sau.

// InvestmentTable java

import java, awt. * ;•

import j ava.awt.event.*;

import java.text.*;

import javax.swing.*;

import javax.swing.table.*;

public class InvestmentTable{

public static void main(String args[]){

JFrame fr – new InvestmentTableFrame (); fr.show();

}

}

class InvestmentTableFrame extends JFrame {

public InvestmentTableFrame(){ setTitle(“Investment Table”); setsize(300, 200);

addWindowListener(new WindowAdapter (){

public void windowclosing(WindowEvent e){ System.exit(0);

}

)) ;

// Mô hình dữ liệu tính các ô cùa bảng mỗi khi yêu cầu

TableMòdel model = new InvestmentTableModel(30, 5, 10); JTable table = new JTable(model);

Container content = getContentPane(); content.add(new JScrollPane(table), “Center”);

}

class InvestmentTableModel extends AbstractTableModel{ private int years; private int minRate; private int maxRate;

private static double INITAL_BALANCE = 100000.0;

public InvestmentTableModel(int y, int rl, int r2){ years = y; minRate = rl; maxRate = r2;

}

public int getRowCount(){ return years;

}

public int getColumnCount() {

return maxRate – minRate + 1;

}

public Object getValueAt(int r, int c){ double rate = (c + minRate) / 100.0; int nperiods = r;

double futureBalance = INITAL_BALANCE *

Math. pow (1+rate, nperiods);

return

NumberFormat.getCurrencylnstance (). format (futureBalance) ;

)

public String getColumnName(int c){

double rate = (c + minRate) / 100.0;

return NumberFormat.getPercentlnstance.O .format(rate);