2010-11-17 10 views

Respuesta

13

Aquí hay una manera:

Action closeWindow = new AbstractAction("Close Window") { 
    @Override public void actionPerformed(ActionEvent e) { 
    // window closing code here 
    } 
}; 
closeWindow.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(
    KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); 

poner ese Action en un menú en la barra de menú. El acelerador será Ctrl +W en Windows.

Probablemente mejor sería utilizar la Keybinding API tener el panel principal en cada JFrame (asumiendo que no múltiple) se unen al mismo KeyStroke como anteriormente en su (WHEN_FOCUSED) mapa de entrada a una acción en su mapa de acción que cierra el marco .

public class ClosableWindow extends JFrame { 
    public void setUp() { 
    JPanel mainPanel = createMainPanel(); 

    int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); 
    KeyStroke closeKey = KeyStroke.getKeyStroke(KeyEvent.VK_W, mask); 

    mainPanel.getInputMap().put(closeKey, "closeWindow");   

    mainPanel.getActionMap().put("closeWindow", 
     new AbstractAction("Close Window") { 
      @Override public void actionPerformed(ActionEvent e) { 
      setVisible(false); 
      dispose(); 
      } 
     }); 

    getContentPane().add(mainPanel);  
    } 
} 
Cuestiones relacionadas