首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两次使用之间保持状态

在两次使用之间保持状态
EN

Stack Overflow用户
提问于 2015-10-23 16:59:43
回答 2查看 114关注 0票数 1

netbeans-platform的新手。

如何保存从一次执行到下一次执行的状态。

netbeans平台优雅地记住了我所有窗口的状态和位置。我如何向该状态添加一些我自己的数据?与Netbeans非常类似,它会保存打开的项目,并在启动时重新打开它们以及它们的状态。

Ass建议here我在我的TopComponent中添加了以下内容,但它不起作用。调用了getPersistenceType,但既未调用writeExternal n‘,也未调用readExternal

代码语言:javascript
复制
@Override
public int getPersistenceType() {
  return TopComponent.PERSISTENCE_ALWAYS;
}

@Override
public void writeExternal(ObjectOutput oo) throws IOException {
  super.writeExternal(oo);
}

@Override
public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException {
  super.readExternal(oi);
}

评论here建议使用readPropertieswriteProperties,但我觉得不太对劲。我不想存储Properties,我想存储State

EN

回答 2

Stack Overflow用户

发布于 2015-10-23 17:08:51

几年前,我在一个NetBeans平台应用程序中使用了Swing应用程序框架的会话存储功能,在博客中介绍了这一点:

http://puces-blog.blogspot.ch/2009/04/netbeans-platform-meets-swing.html

以下3个类应提供与NetBeans平台的集成:

  • ModuleApplicationContext.java
  • ModuleLocalStorage.java
  • Modules.java

仅当您希望支持SwingX类(如JXTable )时才需要引用的XProperties和JXTable。

要在您自己的模块中使用此功能,您需要在ModuleInstall类中初始化上下文:

代码语言:javascript
复制
public class Installer extends ModuleInstall {  

   private static ModuleApplicationContext applicationContext;  

   @Override  
   public void restored() {  
       applicationContext = new ModuleApplicationContext(Modules.getModuleInfo(  
               Installer.class));  
   }  

   public static ModuleApplicationContext getApplicationContext() {  
       return applicationContext;  
   }  
}  

对于给定的图形用户界面,您可以使用以下命令存储contentPane会话状态:

代码语言:javascript
复制
Installer.getApplicationContext().getSessionStorage().save(  
                getContentPanel(), SESSION_STORAGE_XML);  

并使用以下命令恢复状态:

代码语言:javascript
复制
Installer.getApplicationContext().getSessionStorage().  
                restore(getContentPanel(), SESSION_STORAGE_XML);  

注意:您需要设置相关组件的组件名称

您可以在此处找到完整的示例:http://sourceforge.net/p/puces-samples/code/HEAD/tree/tags/sessionstate-1.0/

但是,还要注意的是,Swing应用程序框架(JSR-296)的开发已经撤回。

有一个叫做Better Swing Application Framework的分支,但我还没有用过它。

票数 0
EN

Stack Overflow用户

发布于 2016-02-17 03:01:50

我在这方面也遇到了一些问题,但最终我可以解决它。

使用@TopComponent.Description注释您的topcomponent类,并在注释中设置正确的持久性类型。您的topcomponent类必须是可序列化的,所以topcompent中的每个字段都必须是可序列化的或瞬态的。您可以使用readExtern/writeExternal实现您的自定义序列化,但这不是必需的,您可以删除它们。如果它仍然不起作用,请在关闭netbeans应用程序后查看日志,您将看到为什么平台无法序列化您的topComponent。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33298497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档