我现在感兴趣的特殊事情是JTable'取消'行动......特别是我试图找出原因,为JTable的CellEditor组件(JTextField)设置InputVerifier,调用IV的shouldYieldFocus()方法当我按Escape时,不是一次,而是两次(!)。
我已经检查过它是VK_CANCEL('取消')的JTable的ActionMap条目,它正在这里运行。
此外,当我按下这样的Escape时,我发现JTable的editingCanceled方法没有被调用......而这反过来又让我很难让IV知道取消动作正在发生(而且因此不应该调用验证。)
当然,创建我自己的"取消" Action,调用从JTable的ActionMap获取的取消动作,但也设置一个标记,说明"忽略JTF的文本...我们取消"。但我只想看看取消行动实际上包含的内容......即代码。
后
看了一个或两个类的源代码,特别是JComponent和AbstractCellEditor,看起来IV的触发,当得到一个关注焦点的请求时,可能并不令人惊讶。
我还没有解决我的具体问题,我仍然想知道是否有可能找到这些ActionMap动作的代码...
答案 0 :(得分:2)
是。正如所讨论的那样here和插图here,TextAction
的子类由文本组件的UI委托安装为key bindings,通常是{{3}的子类}。每个Action
通常是嵌套在相关编辑器工具包中的类的实例。例如,BasicTextUI
包含多个public
操作,以及内部使用的大量DefaultEditorKit
操作。
Action
名为"cancel"
的处理程序可以在JTable
UI委托中找到,通常是package-private的子类。
如BasicTableUI
所述,请确保您的verify()
实施没有副作用。检查完整的示例Validating Input。使用InputVerifier
中的TableCellEditor
的示例会显示为here和here。
WHEN_FOCUSED
向JTextField
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;
}