Ờ 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);
23 Th3 2021
24 Th3 2021
24 Th3 2021
24 Th3 2021
23 Th3 2021
23 Th3 2021