employeemanager.java~16~
来自「《深入浅出设计模式》的完整源代码」· JAVA~16~ 代码 · 共 119 行
JAVA~16~
119 行
package program;
import employee.Employee;
import employee.EmployeeMemento;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class EmployeeManager{
private JButton loadButton = new JButton("Load");
private JButton saveButton = new JButton("Save");
private JButton undoSaveButton = new JButton("Undo Save");
private JTextField idText = new JTextField();;
private JTextField firstNameText = new JTextField();;
private JTextField lastNameText = new JTextField();;
private JTextField salaryText = new JTextField();;
private JFrame frame;
//caretaker对象,这里是一个Vector变量
private Vector caretaker;
//这就是我们需要处理的employee对象
private Employee employee = new Employee();
public static void main(String[] args){
new EmployeeManager();
}
EmployeeManager(){
frame = new JFrame("Memento Pattern Example");
caretaker=new Vector();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// create input field panel
JPanel topPanel = new JPanel();
topPanel.setLayout(new GridLayout(4,2));
topPanel.add(new JLabel("ID:"));
topPanel.add(idText);
topPanel.add(new JLabel("First Name:"));
topPanel.add(firstNameText);
topPanel.add(new JLabel("Last Name:"));
topPanel.add(lastNameText);
topPanel.add(new JLabel("Salary:"));
topPanel.add(salaryText);
// create button panel
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new FlowLayout());
bottomPanel.add(loadButton);
bottomPanel.add(saveButton);
bottomPanel.add(undoSaveButton);
// set the action listeners to each button
loadButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
loadEmployee();
}
});
saveButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
saveEmployee();
}
});
undoSaveButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
undoEmployee();
}
});
// add the panels to the frame and show it
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(topPanel, BorderLayout.CENTER);
frame.getContentPane().add(bottomPanel, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
// display the employee for the first time
}
private void saveEmployee(){
EmployeeMemento memento;
employee.setId(Integer.parseInt(idText.getText()));
employee.setFirstName(firstNameText.getText());
employee.setLastName(lastNameText.getText());
employee.setSalary(Integer.parseInt(salaryText.getText()));
memento = employee.getMemento();
caretaker.addElement(memento);
idText.setText("");
firstNameText.setText("");
lastNameText.setText("");
salaryText.setText("");
}
private void undoEmployee(){
EmployeeMemento memento;
try{
memento = (EmployeeMemento) caretaker.lastElement ();
employee.setMemento(memento);
caretaker.removeElement(memento);
loadEmployee();
}
catch (Exception e){
System.err.println(e.toString());
}
}
private void loadEmployee(){
idText.setText(""+employee.getId());
firstNameText.setText(employee.getFirstName());
lastNameText.setText(employee.getLastName());
salaryText.setText(""+employee.getSalary());
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?