写在前面
在idea中设置的信息,我们重启idea后,这些信息还是在的,这其实是通过idea插件的持久化存储功能实现的,本文一起来看下如何实现。
1:正戏
为了方便测试,首先定义如下的ui:
我们需要在代码中给按钮注册事件来来存储用户录入的值,以及回显上次持久化存储的值:
public class AUI {
private JTextField textField1;
private JButton btn;
private JPanel topPanel;
public JComponent getComponent() {
return topPanel;
}
public AUI() {
String msg = StateObj.getInstance().getState().getMsg();
// Messages.showInfoMessage("检测到存储值:" + msg, "系统提示");
System.out.println("哈哈哈哈哈哈哈呃呃");
// 回显用户录入的值
textField1.setText(msg);
btn.addActionListener(e -> {
String text = textField1.getText();
System.out.println("用户录入新值:" + text);
if (text == null || (text = text.trim()) == "") {
Messages.showInfoMessage("你咋不写东西???", "超级警告!!!");
} else {
// 持久化存储
StateObj.getInstance().getState().setMsg(text);
Messages.showInfoMessage("存储[ " + text + " ]成功", "系统提示");
}
});
}
}
其种类StateObj完成持久化存储的功能,源码如下:
@State(name = "DataSetting",storages = @Storage("plugin.xml"))
public class StateObj implements PersistentStateComponent<DataState> {
// 真正存储数据的对象
// private DataState state = new DataState();
private DataState state;
/**
* 注意该类示例不能new要通过idea 插件sdk提供的api来获取,这样才能对数据做持久化处理
* @return
*/
public static StateObj getInstance() {
return ServiceManager.getService(StateObj.class);
}
/**
* 获取持久化存储的数据
* 接口方法,返回存储数据的状态对象即可
* @return
*/
@Nullable
@Override
public DataState getState() {
return state;
}
/**
* 接口方法,运行时该方法会自动调用,来给负责存储具体数据的对象赋值,因此该对象不需要我们创建
* @param state
*/
@Override
public void loadState(@NotNull DataState state) {
System.out.println("sett state!!!");
this.state = state;
}
}
类DataState负责真正存储数据(这个就是自己随便定义了,只要能满足你的值存储的需求即可):
public class DataState {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
另外StateObj还需要在plugin.xml中配置:
接着来运行测试,首次启动后:
再次运行可以直接回显,说明持久化存储成功: