Java 是Swing组件';行动地图标准化了吗?

Java 是Swing组件';行动地图标准化了吗?,java,swing,Java,Swing,假设我有一个标准的Swing组件,比如JSlider,但是我想稍微调整一下输入映射。默认输入映射和动作映射是按外观安装的,我想重用动作映射中已有的一些动作。为此,我需要将ActionMap条目的键放入InputMap条目的值中 我可以使用调试器在运行时轻松查找ActionMap键(始终是字符串),并重用它。它将工作-在我的JDK和L&F版本的保证 所以问题是,默认Swing组件操作的键是否在任何地方都有文档记录,它们是否可以随时间“合法”更改(即,从JDK版本更改为JDK版本,或者从L&F更改为

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

我可以使用调试器在运行时轻松查找ActionMap键(始终是字符串),并重用它。它将工作-在我的JDK和L&F版本的保证

所以问题是,默认Swing组件操作的键是否在任何地方都有文档记录,它们是否可以随时间“合法”更改(即,从JDK版本更改为JDK版本,或者从L&F更改为L&F),并且您在实践中看到过这样的更改吗


谢谢。

ActionMap
InputMap
getParent()
setParent()
,因此解决方案是:

  • 创建一个新地图,只需进行少量更改
  • 查询组件的地图
  • 将该地图设置为新地图的父地图
  • 在组件中安装新映射
  • 这样,您的修改将覆盖和扩展现有映射

    [编辑]我不知道任何地方都有一个所有键的列表。但是像
    maxScroll
    这样的东西应该是“稳定的”,也就是说,它们应该存在于未来的版本中(并不是说Swing在过去10年中变化很大……)

    因此,如果需要替换某个映射,请使用上述方法。这样,就可以保留L&F的所有现有映射(即使犯了错误,也可以保持组件可用)。如果您依赖于覆盖某个键,那么我建议检查该键是否存在,并在它突然消失时抛出一个错误


    这样,您的代码将正常工作(可能会工作很多年),如果代码出现故障,它将主动告诉您有关更改的信息。

    好的,我花了一些时间才找到它

    简言之,它们似乎没有标准化(很多),也没有文档化(很多)

    课堂外观是关键。这是层次结构:

    • 外观

    • BasicLookAndFeel

      • 金属手感
      • 外观
      • 窗口外观和感觉
    • 多外观
    在BasicLookAndFeel类中,您可以找到操作和键绑定的默认映射,这些映射将由所有其他类继承。所以你可以认为这个课程是标准。您可以在对象“defaults”的创建中看到这一点,大约是498 for Java 1.4.217

    可以在实现程序(如WindowsLookAndFeel)上找到其他键绑定和覆盖

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

    因此,简而言之,DefaultEditorIt中定义的操作不太可能更改。但是,在L&F实现之间,密钥绑定完全不同。使用DefaultEditorKit.something从映射中检索操作,它应该可以跨版本工作。可能与JSlider一起使用的DefaultEditorAction示例:

    /**
     * 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";
    

    我一直在寻找这个问题的答案。比看起来更难+1因为我不能用InputMap提供更多相同的工作,所以我想知道为什么不能简单地扩展现有的映射?为什么要将所有键复制到新地图?扩展输入和动作地图没有问题,我也不想复制所有键。对不起,如果我的问题措辞不清楚的话。我的问题是,这些地图中使用的动作键是否记录在任何地方(换句话说,假设有一个键的代码有多可靠,比如说,“maxScroll”用于将滑块移动到刻度末端的动作)Aaron,对不起,我给你的答案打分为-1,但没有意识到我可能没有足够清楚地说明问题。stackoverflow将允许我撤销反对票,如果您对您的回答进行任何更改,请参阅我的编辑。对于-1,只需再次单击“向下箭头”即可撤消它。