【问题标题】:Java Swing ActionMap keysJava Swing ActionMap 键
【发布时间】:2009-03-19 14:39:34
【问题描述】:

我正在学习 Swing,并且正在阅读有关 InputMapActionMap 的信息。 O'Reilly 关于 Swing 的书说 ActionMap 的键可以是任何 Object,但按照惯例是 Strings。

是否有任何理由使用String 以外的对象? (例如enum

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

编辑:澄清一下,我在阅读文档时想到的想法是使用enum 而不是String。我是否有理由应该使用String

【问题讨论】:

    标签: java swing


    【解决方案1】:

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

    MyActions.NAME.toString()
    

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

    编辑:Swing 早于 Enum。这只是我们方便的包罗万象的答案吗?查看card layout 的api。如果曾经有一个设计需要枚举,那就是卡片布局(允许循环显示要在同一位置显示的组件列表)。我想有些用例可能首选字符串(例如,用户添加的材料),但请注意:大多数时候我将使用某种预定义的状态模式。

    【讨论】:

    • “我不知道你为什么不直接使用枚举”:没错!这是我的第一个想法。
    【解决方案2】:

    实际上,您提出的就是 Swing 本身所做的(有时),所以您是对的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-28
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多