java 事件中如何獲取觸發源

java的按鈕事件中可以通過

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                evt.getSource()   // 獲取到觸發事件的按鈕控件
            }

獲取到觸發事件的按鈕控件, 這個大家都知道

 

但如果換一種方式

 

        HelpListener sy = new HelpListener(this);
        KeyStroke stroke = KeyStroke.getKeyStroke("F1");
        InputMap helpInputMap = this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        helpInputMap.put(stroke, "F1");
        this.getRootPane().getActionMap().put("F1", sy);

 

 

public class HelpListener extends AbstractAction {

    private Logger logger = Logger.getLogger(HelpListener.class.getName());
    private String refresh = null;
    private HelpInterface helpInterface;

    public void actionPerformed(ActionEvent e) {

          //事件處理

    }

 

這個是F1幫助的事件觸發,那麼如何獲取到觸發的控件呢

 

經過幾小時的摸索,終於發現在這種情況下e.getSource() 其實也是可用的

這時獲取的是RootPane控件,爲了這個控件我費了好多力氣,其實這個就是當前觸發F1按鍵的Frame的 Frame.getRootPane

可通過(java.awt.Component) e.getSource().getParent() 獲取到觸發按鍵的Frame

 

其實想想也可理解,因爲不是通過鼠標觸發而是通過鍵盤觸發的,因此事件的發出者也只能是Frame

 

希望以上的調研對大家能有所幫助,呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章