기본적으로 일부 클라이언트가 객체를 외부 적으로 수정할 수 있도록 클라이언트 서버 아키텍처에서 작업하고 있습니다.AbstractTableModel을 확장하고 jTable을 동적으로 채 웁니다.
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이 디스플레이를 감지하고 새로 고칠 수 있습니까?
클라이언트가 Operations 추가를 위해 TableModel 메서드를 사용하고 있지 않기 때문에. 그들은이 수업에 접근 할 수 없습니다. 그 외에도 TableModel 생성자에서 Bank의 전체 operationList를주는 것이 좋은 아이디어인지는 모르겠다. ...
효과적으로 연결에 성공하면 클라이언트는 작업을 수행하는 세션 만 제공됩니다. 하지만 세션 생성자에게 은행의 인스턴스를 제공해야합니다. 왜냐하면 효과적으로, 나는 전체 Bank 인스턴스를 클라이언트에 보내지 않지만 Session의 작업 목록에 대해서조차도 작업을 수행해야하므로 Session (Bank bank) 생성자가 있습니다. 테이블 문제에 관해서, 이해한다면, 솔루션은 테이블 모델 자체를 캡슐화하고 ArrayList 작업을 제거하는 것일까 요? (ArrayList는 이미 테이블 모델에 있기 때문에). – xenom
예, 실제로 테이블 모델을 은행에 캡슐화하고 은행을 세션에 캡슐화 할 수 있습니다. 따라서 모든 것이 매우 밀접하게 결합되어 실제 응용 프로그램에는 현실적이지 않지만 아이디어는 그렇게하는 것입니다. 이벤트 및 이벤트 리스너를 사용하면 모든 것을 덜 결합 할 수 있습니다. –
아키텍처가 현실적이지 않다면 차라리 이벤트 및 이벤트 리스너에 대해 알아볼 것입니다. 그러나 나는 그렇게하는 법을 정말로 모른다. Session이 은행을 모르는 경우 어떻게 은행 방법을 호출 할 수 있습니까? – xenom