Java Swing ActionMap键

时间:2009-03-19 14:39:35

标签: java swing

我正在研究Swing的学习曲线,正在阅读InputMapActionMap。关于Swing的O'Reilly书中说ActionMap的关键字可以是任意Object,但按照惯例是String s。

有没有理由使用String以外的对象? (例如enum

我认为使用字符串文字是不好的做法,因为它们可能输入错误而不会产生任何编译错误。所以我猜测将ActionMap键存储为一次定义的不可变static final类变量是个好习惯(例如MyAction.NAME)。

编辑:为了澄清,我在阅读文档时想到的想法是使用enum而不是String。我使用String是否有原因?

2 个答案:

答案 0 :(得分:2)

我不确定你为什么不直接使用枚举(没看过O'Reilly的书),但在这种情况下,我可能宁愿使用Enum.toString()方法,如在

MyActions.NAME.toString()

这节省了定义这么多静态变量的开销,如果您希望存储有关状态的更多信息,可以扩展MyActions枚举的功能,并且它保证每个枚举的唯一字符串。所有在拼写错误上都有编译时错误。

编辑:Swing早于Enum。这可以成为我们方便的全能答案吗?看看card layout的api。如果有一个设计要求枚举,它是一个卡片布局(允许循环通过一个组件列表显示在同一个地方)。我想有一些用例,其中字符串可能是首选的(例如用户添加的材料),但是来吧:大多数时候我将使用某种预定义的状态模式来使用它。

答案 1 :(得分:0)

实际上,你提出的是Swing本身所做的事情(有时候),所以你是对的。

检查javax.swing.DefaultEditorKit类。 Swing使用所有这些静态最终字符串来创建ActionMap。

但是,如果你检查一些外观的初始化,比如WindowsLookAndFeel,它们在源代码中也有硬编码的字符串文字。