为JFrame和JDialog等窗口部件添加缺省按钮和响应Escape键盘事件

    技术2022-05-11  106

    JFrame和JDialog都实现了RootPaneContainer接口,可以通过取得RootPane来实现。 public class RootPaneHelper {         private RootPaneHelper() {     }         /**      *为RootPaneContainer组件设置缺省按钮,      *并添加Escape事件响应      */     public static void decorate(RootPaneContainer rpc,JButton defaultButton,Action escapeListener){         JRootPane rp=rpc.getRootPane();         rp.setDefaultButton(defaultButton);                 KeyStroke stroke = KeyStroke.getKeyStroke("ESCAPE");         InputMap inputMap = rp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);         inputMap.put(stroke, "ESCAPE");         rp.getActionMap().put("ESCAPE", escapeListener);     }         /**      *为RootPaneContainer组件设置缺省按钮,      *并添加Escape的默认事件响应:关闭窗口      */     public static void decorate(final RootPaneContainer rpc,JButton defaultButton){                 Action action = new AbstractAction() {             public void actionPerformed(ActionEvent actionEvent) {                 ((Component)rpc).setVisible(false);             }         };                 decorate(rpc,defaultButton,action);             }     }

    最新回复(0)