gpt4 book ai didi

java - 如何全局改变Swing JTextFields的ActionMap?

转载 作者:行者123 更新时间:2023-11-30 09:24:37 26 4
gpt4 key购买 nike

我想通过我的自定义实现替换一些操作来更改整个应用程序中 Swing JTextFields 的 ActionMap。原因的解释可以引用下面的帖子:

How do I make the caret of a JTextComponent skip selected text?

如果我这样做,效果很好:

ActionMap map = (ActionMap)UIManager.get("TextField.actionMap");
map.put(DefaultEditorKit.backwardAction, new MyCustomAction());

现在唯一剩下的问题是,到目前为止,当我在 JTextField 的第一个实例化之后 执行该代码时,我只能让它工作。但是,理想情况下,我想将此代码集成到自定义外观或其他不必了解应用程序的中心位置。呼唤

UIManager.getDefaults()

first 不会改变任何东西。 UIManager.get("TextField.actionMap") 返回的 map 之后仍然为空。

现在我无法在我的应用程序的某些初始化方法中放置一个虚拟的 new JTextField(),然后操纵非常丑陋的 Action 映射。

最佳答案

当 XXTextComponent 的第一个实例获得它的 uidelegate 时,共享父 actionMap 被创建。方法在BasicTextUI中:

/**
* Fetch an action map to use.
*/
ActionMap getActionMap() {
String mapName = getPropertyPrefix() + ".actionMap";
ActionMap map = (ActionMap)UIManager.get(mapName);

// JW: we are the first in this LAF
if (map == null) {
// JW: create map
map = createActionMap();
if (map != null) {
// JW: store in LAF defaults
UIManager.getLookAndFeelDefaults().put(mapName, map);
}
}
....
}

因此,如果您想添加到该 map ,则必须在创建实例后设置 LAF 后执行此操作。

没有办法绕过,尽管感觉很丑。

关于java - 如何全局改变Swing JTextFields的ActionMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15584605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com