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
希望以上的調研對大家能有所幫助,呵呵