Будет ли кто-то добрым смотреть на эту простую программу и рассказать мне, что не так с реализацией шаблона проектирования Observer?Образец шаблона наблюдателя. Нужна помощь, чтобы понять, почему это не работает.
Когда я запустил его, в таблице ничего не отображается (показывалось перед реализацией).
Я только начинаю изучать шаблоны дизайна, поэтому я не уверен, как его отладить.
Мой преподаватель дал нам этот пример программы с шаблоном проектирования Observer ... и, похоже, он не работает!
Программа - это просто данные в данных в jTable.
Я благодарю вас заранее ->here's the complete code
Вот GUI для ввода данных:
package com.employe.listing;
import java.util.ArrayList;
public class addEmployeJFrame extends javax.swing.JFrame {
ArrayList<addEmployeJFrameObserver> observers = new ArrayList<>();
public addEmployeJFrame() {
initComponents();
}
public synchronized void addAddEmployeJFrameObserver(addEmployeJFrameObserver observer) {
observers.add(observer);
}
public synchronized void removeAddEmployeJFrameObserver(addEmployeJFrameObserver observer) {
observers.remove(observer);
}
public synchronized void notifyAddEmployeJFrameObserver(Employe e) {
for(addEmployeJFrameObserver o : observers) {
o.NotifyAddEmployeJFrame(e);
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Employe employe = new Employe();
employe.setName(jTextField1.getText());
employe.setJob(jTextField2.getText());
employe.setSalary(Integer.parseInt(jTextField3.getText()));
employe.setYearsAtWork(Integer.parseInt(jTextField4.getText()));
notifyAddEmployeJFrameObserver(employe);
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
// End of variables declaration
}
Вот контроллер:
package com.employe.listing;
import java.util.ArrayList;
public class Controller implements addEmployeJFrameObserver {
ArrayList<Employe> employes = new ArrayList<>();
ArrayList<ListingEmployesJFrameObserver> observers = new ArrayList<>();
addEmployeJFrame EmployeJFrame;
ListingEmployesJFrame listingJFrame;
public Controller() {
listingJFrame = new ListingEmployesJFrame();
EmployeJFrame = new addEmployeJFrame();
EmployeJFrame.addAddEmployeJFrameObserver(this);
listingJFrame.setVisible(true);
EmployeJFrame.setVisible(true);
}
public synchronized void addListingEmployesJFrameObserver(ListingEmployesJFrameObserver o) {
observers.add(o);
}
public synchronized void removeListingEmployesJFrameObserver(ListingEmployesJFrameObserver o) {
observers.remove(o);
}
public synchronized void notifyListingEmployesJFrameObserver(ArrayList<Employe> employes) {
for(ListingEmployesJFrameObserver o : observers) {
o.notifyListingEmployesJFrame(employes);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Controller controler = new Controller();
}
public void addEmploye(Employe employe) {
employes.add(employe);
notifyListingEmployesJFrameObserver(employes);
}
public ArrayList<Employe> getListEmployee() {
return employes;
}
@Override
public void NotifyAddEmployeJFrame(Employe e) {
this.addEmploye(e);
}
}
и вот в JTable (данные из) :
package com.employe.listing;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class ListingEmployesJFrame extends javax.swing.JFrame implements ListingEmployesJFrameObserver {
ArrayList<Employe> employes = new ArrayList<>();
/**
* Creates new form ListingEmployesJFrame
*/
public ListingEmployesJFrame() {
initComponents();
AbstractTableModel model = new AbstractTableModel() {
@Override
public String getColumnName(int column) {
if(column == 0) {
return "Name";
} else if(column == 1) {
return "Job";
} else if(column == 2) {
return "Salary";
} else {
return "Years";
}
}
@Override
public int getRowCount() {
return employes.size();
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(columnIndex == 0) {
return employes.get(rowIndex).getName();
} else if(columnIndex == 1) {
return employes.get(rowIndex).getJob();
} else if(columnIndex == 2) {
return employes.get(rowIndex).getSalary();
} else {
return employes.get(rowIndex).getYearsAtWork();
}
}
};
jTable1.setModel(model);
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
@Override
public void notifyListingEmployesJFrame(ArrayList<Employe> employes) {
this.employes = employes;
jTable1.updateUI();
}
}
Большое вам спасибо ... Я боролся с этим, и учитель никогда не беспокоился отвечать за свою ошибку! –