基本的に、私はクライアントサーバーアーキテクチャに取り組んでいるので、一部のクライアントはオブジェクトを外部から変更できます。
私は銀行を持っています:
public class Bank{
private List<BankingOperation> operationList = new ArrayList<BankingOperation>();
public void addOperation(BankingOperation op) {
this.operationList.add(op);
//...
}
そして私のサーバー:
public class ServerBank extends JFrame {
private Bank bank;
private JTable table;
private OperationTableModel model;
public ServerBank() {
this.bank = new Bank();
this.model= new OperationTableModel(this.bank.getOperationList());
table = new JTable(model);
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
pack();
}
public static void main (String args[]) throws Exception {
ServerBank frame=new ServerBank();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class OperationTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<BankingOperation> operationList;
public String[] colNames = { "Date", "Login", "Customer","Account", "Operation", "Amount", "Final Balance" };
public Class<?>[] colTypes = { String.class, String.class, String.class, String.class, String.class, Integer.class,
Integer.class };
public OperationTableModel(List<BankingOperation> operationList) {
super();
this.operationList = operationList;
}//...
}
クライアントは、addOperation()を呼び出すことにより、バンクのoperationListにオペレーションを追加できます。
問題は、JTableがそれをどのように検出し、表示を更新できるかということです。
クライアントは、操作を追加するためにTableModelメソッドを使用していないためです。彼らはこのクラスにアクセスできません。その上、TableModelコンストラクターでBankのoperationList全体を指定するのが良いかどうかはわかりません...