Java 是Swing组件';行动地图标准化了吗?
假设我有一个标准的Swing组件,比如JSlider,但是我想稍微调整一下输入映射。默认输入映射和动作映射是按外观安装的,我想重用动作映射中已有的一些动作。为此,我需要将ActionMap条目的键放入InputMap条目的值中 我可以使用调试器在运行时轻松查找ActionMap键(始终是字符串),并重用它。它将工作-在我的JDK和L&F版本的保证 所以问题是,默认Swing组件操作的键是否在任何地方都有文档记录,它们是否可以随时间“合法”更改(即,从JDK版本更改为JDK版本,或者从L&F更改为L&F),并且您在实践中看到过这样的更改吗Java 是Swing组件';行动地图标准化了吗?,java,swing,Java,Swing,假设我有一个标准的Swing组件,比如JSlider,但是我想稍微调整一下输入映射。默认输入映射和动作映射是按外观安装的,我想重用动作映射中已有的一些动作。为此,我需要将ActionMap条目的键放入InputMap条目的值中 我可以使用调试器在运行时轻松查找ActionMap键(始终是字符串),并重用它。它将工作-在我的JDK和L&F版本的保证 所以问题是,默认Swing组件操作的键是否在任何地方都有文档记录,它们是否可以随时间“合法”更改(即,从JDK版本更改为JDK版本,或者从L&F更改为
谢谢。
ActionMap
和InputMap
有getParent()
和setParent()
,因此解决方案是:
maxScroll
这样的东西应该是“稳定的”,也就是说,它们应该存在于未来的版本中(并不是说Swing在过去10年中变化很大……)
因此,如果需要替换某个映射,请使用上述方法。这样,就可以保留L&F的所有现有映射(即使犯了错误,也可以保持组件可用)。如果您依赖于覆盖某个键,那么我建议检查该键是否存在,并在它突然消失时抛出一个错误
这样,您的代码将正常工作(可能会工作很多年),如果代码出现故障,它将主动告诉您有关更改的信息。好的,我花了一些时间才找到它 简言之,它们似乎没有标准化(很多),也没有文档化(很多) 课堂外观是关键。这是层次结构:
- 外观
- BasicLookAndFeel
- 金属手感
- 外观
- 窗口外观和感觉
- 多外观
/**
* 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,只需再次单击“向下箭头”即可撤消它。