Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在框架提供的ActionMaps中,是否有任何地方可以找到操作的实际代码?_Java_Swing_Jtable_Action_Jcomponent - Fatal编程技术网

Java 在框架提供的ActionMaps中,是否有任何地方可以找到操作的实际代码?

Java 在框架提供的ActionMaps中,是否有任何地方可以找到操作的实际代码?,java,swing,jtable,action,jcomponent,Java,Swing,Jtable,Action,Jcomponent,目前我特别感兴趣的是JTable的“取消”操作。。。特别是,我试图找出为什么在为JTable的CellEditor组件(JTextField)设置了InputVerifier的情况下,IV的shouldYieldFocus()方法不会被调用一次,而是在按Escape时被调用两次(!) 我已经检查了这里正在运行的VK_CANCEL(“CANCEL”)的JTable的ActionMap条目 此外,我发现当我像这样按Escape时,JTable的editingCanceled方法没有被调用。。。这反过

目前我特别感兴趣的是JTable的“取消”操作。。。特别是,我试图找出为什么在为JTable的CellEditor组件(JTextField)设置了InputVerifier的情况下,IV的shouldYieldFocus()方法不会被调用一次,而是在按Escape时被调用两次(!)

我已经检查了这里正在运行的VK_CANCEL(“CANCEL”)的JTable的ActionMap条目

此外,我发现当我像这样按Escape时,JTable的editingCanceled方法没有被调用。。。这反过来又使得目前让IV知道取消操作正在发生(因此不应调用验证)有点困难

当然,创建我自己的“取消”操作很容易,它调用从JTable的ActionMap获得的取消操作,但也设置了一个标志,表示“忽略JTF的文本……我们正在取消”。但我只是想看看取消行动实际上包括什么。。。i、 e.守则

以后
查看了一两个类的源代码,特别是JComponent和AbstractCellEditor,当发出一个取消焦点的请求时,似乎会触发IV的shouldYieldFocus,这也许并不奇怪

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

是的。如前所述,的子类由文本组件的UI委托安装,通常是的子类。每个
操作
通常是嵌套在相关编辑器工具包中的类的实例。例如,包括几个
public
操作,以及大量内部使用的操作

名为
“cancel”
操作
的处理程序可以在
JTable
UI委托中找到,该委托通常是的子类

如中所述,确保
verify()
的实现没有副作用。最后给出了一个完整的例子。在
TableCellEditor
中使用
InputVerifier
的示例如下所示

通过
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

如果使用jdk,则源代码已经提供。只需在您的
shouldYieldFocus
方法中设置一个断点,然后查找调用链…谢谢。。。事实上,我是Jython的狂热爱好者,所以这不是我的应用程序代码的选项。当然,如果需要的话,我可以做一些Java实验!事实上,想想。。。我确实检查了堆栈,试图得出准确的结果:这个调用来自哪里?按Enter键时,将调用CellEditor.stopCellEditing,并且IV.shouldYieldFocus将从中删除。。。但由于按下退出键后的“取消”操作触发了两个呼叫,IV.shouldYieldFocus是第一个呼叫。。。这意味着它实际上是Runnable.run()中的一个命令,由。。。有些事,谢谢。。。事实上,我(目前)感兴趣的不是JTextComponent的关键绑定。请注意,“取消”不在您的列表中。。。这实际上属于JTable的ActionMap(或其父母或祖父母)。编辑时,我相信您知道,编辑器的组件(在我的例子中是JTextField)将成为JTable的子组件。。。由于它无法截获VK_CANCEL击键,这将传递给JTable。我仍然不清楚在源代码中哪里可以找到JTable的“取消”操作的代码…哦,就是那个!它在
BasicTableUI
中处理。