package revo.todo.RevoToDo.adapters;
import java.awt.event.WindowAdapter;
public class MyWindowAdapter extends WindowAdapter{
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
System.exit(0);
}
}
package revo.todo.RevoToDo.aspects;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import revo.todo.RevoToDo.App;
import revo.todo.RevoToDo.Window;
@Aspect
public class JSONAspect {
/*
* Json save
*/
@Before("execution(* revo.todo.RevoToDo.adapters.MyWindowAdapter.windowClosing(..))")
@SuppressWarnings("unchecked")
public void saveToJson(){
System.out.println("saveToJson()");
Window window = App.getContext().getBean(Window.class);
try{
JSONObject json = new JSONObject();
json.put("todo", window.getTodoList());
//Write JSON file
try (FileWriter file = new FileWriter("data.json")) {
file.write(json.toJSONString());
file.flush();
} catch (IOException e) {
e.printStackTrace();
}
}catch(Exception e){System.out.println("JSON Save Error!");e.printStackTrace();}
}
/*
* JSon read
*/
@Before("execution(* revo.todo.RevoToDo.Window.setVisible(..))")
@SuppressWarnings("unchecked")
public void readFromJSon(){
System.out.println("readFromJson()");
Window window = App.getContext().getBean(Window.class);
JSONParser jsonParser = new JSONParser();
try (FileReader reader = new FileReader("data.json"))
{
//Read JSON file
Object obj = jsonParser.parse(reader);
JSONObject data = (JSONObject) obj;
window.setTodoList((List) data.get("todo"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
package revo.todo.RevoToDo;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import revo.todo.RevoToDo.adapters.MyWindowAdapter;
import revo.todo.RevoToDo.buttons.RemoveButton;
import revo.todo.RevoToDo.buttons.SubmitButton;
@Component
@PropertySource("classpath:app.properties")
public class Window extends JFrame{
/*
* Serial
*/
private static final long serialVersionUID = -3775184725107046658L;
/*
* Data
*/
private JLabel label;
private JTextArea inputArea;
private List todoList = new ArrayList();
/*
* Constructor
*/
public Window(@Value("${name} on ${version}") String title, @Value("${window_width}") int width, @Value("${window_height}") int height, @Value("${submit_button}") String submitName,@Value("${remove_button}") String removeName,@Value("${textarea_columns}") int cols){
super(title);
setSize(new Dimension(width, height));
setLayout(new GridLayout(2,1));
JPanel showPanel = new JPanel();
JPanel inputPanel = new JPanel();
label = new JLabel("TODO:
");
showPanel.add(label);
inputArea = new JTextArea();
inputArea.setColumns(cols);
inputPanel.add(inputArea);
inputPanel.add( new SubmitButton(submitName));
inputPanel.add( new RemoveButton(removeName));
getContentPane().add(showPanel);
getContentPane().add(inputPanel);
addWindowListener(new MyWindowAdapter());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/*
* Getters & Setters
*/
public JLabel getLabel() {
return label;
}
public void setLabel(JLabel label) {
this.label = label;
}
public JTextArea getInputArea() {
return inputArea;
}
public void setInputArea(JTextArea inputArea) {
this.inputArea = inputArea;
}
public List getTodoList() {
return todoList;
}
public void setTodoList(List todoList) {
this.todoList = todoList;
}
}
为什么不起作用? 我没有在控制台中看到任何消息,方面方法未运行。 有人可以解决吗?