Swing组件的ActionMap中的默认操作名称是否标准化?

ser*_*eda 6 java swing

假设我有一个像JSlider这样的标准Swing组件,但我想略微调整输入映射.默认输入映射和操作映射是按外观安装的,我想重用ActionMap中已有的一些操作.为此,我需要将ActionMap条目的键放入InputMap条目的值中.

我可以在运行时使用调试器轻松查找ActionMap键(总是一个String),并重用它.它将起作用 - 在我的JDK和L&F版本上得到保证.

所以问题是,在任何地方都记录了默认Swing组件操作的关键,它们是否可以"合法地"随时间变化(即从JDK版本到JDK版本或从L&F到L&F)并且您在实践中看到了这样的变化吗?

谢谢.

Mar*_*gón 4

好吧,我花了一段时间才找到这个。

简而言之,它们似乎没有(太多)标准化,也没有(太多)被记录下来。

LookAndFeel 类是关键。这是层次结构:

  • 外观和感觉

  • 基本外观和感觉

    • 金属外观和感觉
    • 主题外观和感觉
    • Windows外观和感觉
  • 多重外观和感觉

在 BasicLookAndFeel 类中,您可以找到操作和键绑定的默认映射,这些映射将由所有其他类继承。所以你可以认为这个类是标准。您可以看到,在创建对象“默认值”时,Java 1.4.2_17 的值约为 498。

可以在实现器上找到其他键绑定和覆盖,例如 WindowsLookAndFeel。

一些标准化名称可以作为静态字段在 DefaultEditorKit 类中找到。这些似乎可以安全地使用和重新映射。它们的用法可以在 WindowsLookAndFeel 和 MotifLookAndFeel 类中看到。假设这些行动将保持不变,我会感到安全。

简而言之,DefaultEditorKit 中定义的 Actions 不太可能改变。然而,L&F 实现之间的键绑定完全不同。使用 DefaultEditorKit.something 从地图中检索操作,它应该可以跨版本工作。DefaultEditorAction 中的示例,您可以将其与 JSlider 一起使用:

/**
 * Name of the Action for extending the selection
 * by moving the caret logically forward one position.
 * @see #getActions
 */
public static final String selectionForwardAction = "selection-forward";
Run Code Online (Sandbox Code Playgroud)