有没有我们可以在框架提供的ActionMaps中找到Actions的实际代码?

时间:2015-07-27 17:02:12

标签: java swing jtable action jcomponent

我现在感兴趣的特殊事情是JTable'取消'行动......特别是我试图找出原因,为JTable的CellEditor组件(JTextField)设置InputVerifier,调用IV的shouldYieldFocus()方法当我按Escape时,不是一次,而是两次(!)。

我已经检查过它是VK_CANCEL('取消')的JTable的ActionMap条目,它正在这里运行。

此外,当我按下这样的Escape时,我发现JTable的editingCanceled方法没有被调用......而这反过来又让我很难让IV知道取消动作正在发生(而且因此不应该调用验证。)

当然,创建我自己的"取消" Action,调用从JTable的ActionMap获取的取消动作,但也设置一个标记,说明"忽略JTF的文本...我们取消"。但我只想看看取消行动实际上包含的内容......即代码。


看了一个或两个类的源代码,特别是JComponent和AbstractCellEditor,看起来IV的触发,当得到一个关注焦点的请求时,可能并不令人惊讶。

我还没有解决我的具体问题,我仍然想知道是否有可能找到这些ActionMap动作的代码...

1 个答案:

答案 0 :(得分:2)

是。正如所讨论的那样here和插图hereTextAction的子类由文本组件的UI委托安装为key bindings,通常是{{3}的子类}。每个Action通常是嵌套在相关编辑器工具包中的类的实例。例如,BasicTextUI包含多个public操作,以及内部使用的大量DefaultEditorKit操作。

Action名为"cancel"的处理程序可以在JTable UI委托中找到,通常是package-private的子类。

BasicTableUI所述,请确保您的verify()实施没有副作用。检查完整的示例Validating Input。使用InputVerifier中的TableCellEditor的示例会显示为herehere

WHEN_FOCUSEDJTextField com.apple.laf.AquaLookAndFeel绑定beep: caret-backward: LEFT, KP_LEFT, ctrl B caret-begin: ctrl P, meta UP, meta KP_UP, HOME caret-begin-line: KP_UP, ctrl A, UP, meta KP_LEFT, meta LEFT caret-begin-paragraph: caret-begin-word: caret-down: caret-end: ctrl N, END, meta KP_DOWN, ctrl V, meta DOWN caret-end-line: DOWN, meta KP_RIGHT, ctrl E, meta RIGHT, KP_DOWN caret-end-paragraph: caret-end-word: caret-forward: RIGHT, ctrl F, KP_RIGHT caret-next-word: alt KP_RIGHT, alt RIGHT caret-previous-word: alt KP_LEFT, alt LEFT caret-up: copy: copy-to-clipboard: meta C, COPY cut: cut-to-clipboard: CUT, meta X default-typed: delete-next: DELETE, ctrl D delete-next-word: alt DELETE delete-previous: BACK_SPACE, ctrl H delete-previous-word: alt BACK_SPACE, ctrl W dump-model: insert-break: insert-content: insert-tab: notify-field-accept: ENTER page-down: page-up: paste: paste-from-clipboard: meta V, PASTE requestFocus: select-all: meta A select-line: select-paragraph: select-word: selection-backward: shift LEFT, shift KP_LEFT selection-begin: shift meta KP_UP, shift meta UP, shift HOME selection-begin-line: shift UP, shift meta KP_LEFT, shift KP_UP, shift meta LEFT selection-begin-paragraph: selection-begin-word: selection-down: selection-end: shift meta DOWN, shift meta KP_DOWN, shift END selection-end-line: shift meta KP_RIGHT, shift DOWN, shift KP_DOWN, shift meta RIGHT selection-end-paragraph: selection-end-word: selection-forward: shift KP_RIGHT, shift RIGHT selection-next-word: shift alt KP_RIGHT, shift alt RIGHT selection-page-down: shift PAGE_DOWN selection-page-left: shift meta PAGE_UP selection-page-right: shift meta PAGE_DOWN selection-page-up: shift PAGE_UP selection-previous-word: shift alt LEFT, shift alt KP_LEFT selection-up: set-read-only: set-writable: toggle-componentOrientation: shift ctrl O unselect: meta BACK_SLASH 的操作和键:

public void newScale(GameObject theGameObject, float newSize) {

    float size = theGameObject.GetComponent<Renderer> ().bounds.size.y;

    Vector3 rescale = theGameObject.transform.localScale;

    rescale.y = newSize * rescale.y / size;

    theGameObject.transform.localScale = rescale;

}