当前位置: 首页 > 面试题库 >

国际化Java Swing桌面应用程序的最佳实践是什么?

居乐池
2023-03-14
问题内容

我敢肯定有很多方法,但是什么是对您的代码影响最小的推荐方法呢?

显而易见的是,您创建了属性文件,但是如何在渲染中交换值?在J2EE中,您总是只需要重新渲染整个页面即可,这很容易。但是在Swing应用程序中,您是否只是在paintComponent(Graphics
g)方法中添加了.getProperty()的代码?

如果是这样,那么看起来似乎并不繁琐,因为现在您必须在不需要的地方到处都覆盖此方法…

附加: 如何设置通知系统以重新渲染所有当前可见的组件,而不强制某种注册模式?

我想如果我覆盖paintComponent(Graphics
g),我要做的就是触发一个事件,该事件发生了某些变化,并且paintComponent(Graphics g)方法将被调用…


问题答案:

我想到的唯一解决方案是为所有需要重新渲染的组件创建一个大型注册表。然后,如果调用切换区域设置,则可以只调用注册表,它将遍历所有已注册的组件并调整其值。因此,例如,对于所有已注册的JLabel,它将按照

for(JLabel specificJLabel : REGISTRY.registeredJLabels)
{
  String localeKey = specificJLabel.getActionCommand();
  specificJLabel.setText(ResourceBundle.getString(localeKey)); 
}

区域设置键存储在组件ActionCommand中的位置。然后,无论当前正在渲染什么屏幕,主父面板都负责重新渲染它。同样,通过这种方式,注册表也不必管理区域设置键,这些键与注册表完全分离。每个组件负责管理它自己的ResourceBundle的区域设置密钥。



 类似资料:
  • 我有一个Spring mvc项目,有Spring data、jpa和hibernate。我有一个多语言数据库。我设计了我的数据库和实体。我正在寻找一种按语言查询表的最佳实践。我必须编写自定义jpa查询吗,或者有一种通用的方法来查询我的表。 如果我在数据库或实体设计上有错误,请警告我。 数据库: 本地化字符串实体: 多语言字符串实体: 类别实体: 类别存储库: 我怎么能传递一个语言参数到并获得该语言

  • 我正在构建一个全栈 Web 应用程序。我正在使用 Vue.js作为前端,Spring启动用于后端,将 PostgreSQL docker 容器用于数据库。但是,我很好奇,一旦我完成了Web应用程序的开发,我应该在哪里以及如何部署它。 我在下面列出了我的问题: < li >我应该在哪里部署我的全栈应用程序,如AWS、GCP、Hiroku或任何其他平台。 < li >部署我的前端、后端和数据库的最佳实

  • 所以我有一个Web应用程序,其中前端是用React编写的,后端是用NodeJs/NestJ编写的,并且处于部署应用程序的阶段。我有一个运行Ubuntu的Linode服务器,我最初的想法是安装Docker 那么,这是设置应用程序的好方法吗?这种设置有什么利弊吗?除了因为需要服务器数量而定价之外?或者还有其他更有益的选择吗? 提前致谢。

  • 由于有多个实现提供了OAuth2功能,我们目前正在研究几个可用的选项。(例如Keycloak和ORY Hydra)。我们的选择取决于我们要做多少工作,改变应用程序的现有结构,如何处理数据库中的用户。但无论我们选择哪种实现方式,我们都将面临类似的问题。 问题 > react应用程序如何处理登录过程和令牌存储? 这同样适用于刷新令牌流。因为对于我自己的应用程序,我必须设置cookie,对于第三方,这必

  • 问题内容: 我刚开始学习Go,并通读现有代码以学习“其他人的做法”。在这种情况下,遍历使用go“工作区”,尤其是与项目依赖关系有关的地方。 在处理各种Go项目时,使用一个或多个Go工作区(即$ GOPATH的定义)的常见(或存在)最佳实践是什么?我应该期望有一个类似于我所有项目的中央代码存储库的Go工作区,还是在我处理这些项目时都明确将其分解并设置$ GOPATH(有点像python) virtu

  • 问题内容: 即使将MySQL DB,表和字段的排序规则设置为utf8_general_ci,也经常发生将 é 等字符转换为 é的情况 。页面的 Content-Type中 的编码也设置为UTF8。 我知道utf8_encode / decode,但是我不确定在哪里以及如何使用它。 我已经阅读了“ 绝对是每个软件开发人员的绝对最低限度,肯定必须了解Unicode和字符集(无借口!) ”一文,但是我