На данный момент я заинтересован в том, что действие «отменить» JTable ... в частности, я пытаюсь выяснить, почему, с помощью InputVerifier, установленного для компонента CellEditor JTable (JTextField), значение IV должно составлять значение YieldFocus () метод вызывается не один раз, а дважды (!), когда я нажимаю Escape.Есть ли где-нибудь, где мы можем найти фактический код Действия в предоставляемых Framework ActionMaps?
Я проверил, что это запись ActionMap JTable для VK_CANCEL ('cancel'), которая запускается здесь.
Кроме того, я обнаружил, что метод редактирования JTableCanceled НЕ вызывается, когда я нажимаю Escape, как это ... и это в свою очередь делает несколько сложным в настоящее время, чтобы позволить IV знать, что происходит действие отмены (и что проверка не должна поэтому назовем).
Конечно, достаточно легко создать собственное действие «Отмена», которое вызывает действие «Отмена», полученное из ActionMap JTable, но также устанавливает флаг «игнорирование текста JTF ... мы отменяем», , Но я просто хотел бы увидеть, что действие аннулирования фактически состоит из ... то есть кода.
позже
поглядев на исходный код для одного или двух классов, в частности JComponent и AbstractCellEditor, оказывается, что shouldYieldFocus в IV, срабатывает, возможно, не то, что удивительно, когда просьба о проведении фокус прочь.
Я еще не решил свою конкретную проблему, и я все же хотел бы знать, если это возможно, чтобы найти код этого ActionMap действий ...
Если вы используете JDK, исходный код уже поставляется. Просто установите точку останова в вашем методе 'shouldYieldFocus' и найдите цепочку вызовов ... – Holger
Спасибо ... на самом деле я фанатик Jython, поэтому это не вариант с моим кодом приложения. Хотя, конечно, я могу шуметь, если понадобится, Java-эксперимент! –
На самом деле, подумайте ... Я исследовал стек, чтобы попытаться дать именно это: откуда этот звонок? Когда вы нажимаете Enter, вызывается CellEditor.stopCellEditing и IV.shouldYieldFocus из этого ... но с двумя вызовами, вызванными действием «cancel» после нажатия клавиши Escape, IV.shouldYieldFocus является *** первым *** вызовом ... означает, что на самом деле это команда в Runnable.run(), которая запускается ... что-то. –