在开发Swing应用程序时,我使用的是Action
而不是Listener
。我有一个通常从AbstractButtons
触发的操作,但现在我需要在选择JTree
节点时触发它。
由于TreeSelectionModel
不支持动作,我想知道将这个归档的最佳做法是什么。
到目前为止,我想出了一个实现广义方法的想法,该方法是从actionPerformed(ActionEvent)
以及addTreeSelectionListener(TreeSelectListener)
调用的。
任何有更好主意的人?
答案 0 :(得分:2)
这似乎可能会增加TreeModel
及其视图组件JTree
之间的耦合。由于Action
个实例经常在key bindings中使用,因此可能有助于审核为常见外观和广告定义的现有操作。感觉实现,如@ camickr的文章Key Bindings所示。这些操作可以从TreeSelectionListener
引发,如此example所示,它利用了滚动窗格操作。
附录:作为参考,javax.swing.plaf.metal.MetalLookAndFeel
定义了这些JTree
操作和绑定。
Action Focused Ancestor ------ ------ ------- addToSelection SPACE cancel ESCAPE clearSelection ctrl BACK_SLASH collapse SUBTRACT copy ctrl INSERT, ctrl C, COPY cut CUT, shift DELETE, ctrl X expand ADD extendTo shift SPACE moveSelectionTo shift ctrl SPACE moveSelectionToParent paste shift INSERT, ctrl V, PASTE scrollDownChangeLead ctrl PAGE_DOWN scrollDownChangeSelection PAGE_DOWN scrollDownExtendSelection shift ctrl PAGE_DOWN, shift PAGE_DOWN scrollLeft ctrl LEFT, ctrl KP_LEFT scrollLeftChangeLead scrollLeftExtendSelection scrollRight ctrl RIGHT, ctrl KP_RIGHT scrollRightChangeLead scrollRightExtendSelection scrollUpChangeLead ctrl PAGE_UP scrollUpChangeSelection PAGE_UP scrollUpExtendSelection shift PAGE_UP, shift ctrl PAGE_UP selectAll ctrl SLASH, ctrl A selectChild RIGHT, KP_RIGHT selectChildChangeLead selectFirst HOME selectFirstChangeLead ctrl HOME selectFirstExtendSelection shift HOME, shift ctrl HOME selectLast END selectLastChangeLead ctrl END selectLastExtendSelection shift END, shift ctrl END selectNext DOWN, KP_DOWN selectNextChangeLead ctrl DOWN, ctrl KP_DOWN selectNextExtendSelection shift ctrl DOWN, shift DOWN, shift ctrl KP_DOWN, shift KP_DOWN selectParent LEFT, KP_LEFT selectParentChangeLead selectPrevious KP_UP, UP selectPreviousChangeLead ctrl UP, ctrl KP_UP selectPreviousExtendSelection shift UP, shift KP_UP, shift ctrl UP, shift ctrl KP_UP startEditing F2 toggle toggleAndAnchor ctrl SPACE