Pressionar F8 e fechar o JFRAME

5 respostas
marciofermino

Amigos uso NetBeans ( Swing ) gostaria de pressionar F8 e fechar o JFrame, fiz o seguinte código.

rss mais imaginam.,.não fechou… oque poderia estar errado.?

private void formKeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
     if (evt.getKeyCode() ==KeyEvent.VK_F8) {
       this.dispose();
    }
    
}

Obrigado a quem puder ajudar.

5 Respostas

ivo_costa

A sua tela tem vários componentes?
Se sim desse jeito vc vai ter que colocar um keypressed em cada componente ou fazer isso:

public class Teste extends JFrame {

   private int num = 0;
      public Teste(){
       JButton um = new JButton("um");
       um.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e) {
               num++;
               System.out.println("um " + num);
           }
       });
       JButton dois = new JButton("dois");
       dois.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e) {
               num++;
               System.out.println("dois " + num);
           }
       });
              InputMap inputMap = dois.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW);
       KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0);
       inputMap.put(enter, "teste");
       dois.getActionMap().put("teste", new ClickAction(dois));
              um.setBounds(10, 10, 80, 30);
       dois.setBounds(90, 90, 80, 30);
              add(um);
       add(dois);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setLayout(null);
       setSize(400, 400);
       setVisible(true);
   }
      public class ClickAction extends AbstractAction {
       private JButton button;

       public ClickAction(JButton button) {               this.button = button;
       }
       public void actionPerformed(ActionEvent e) {               button.doClick();}
   }

   public static void main(String[] args) {
       Teste teste = new Teste();
   }

}
ViniGodoy

Fazer a cada componente também não é uma boa idéia.

O melhor é usar o InputMap. Basta subtituir seu código por isso aqui:

KeyStroke stroke = KeyStroke.getKeyStroke("F8"); Action actionListener = new AbstractAction() { public void actionPerformed(ActionEvent actionEvent) { dispose(); } }; InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(stroke, "CLOSE"); rootPane.getActionMap().put("CLOSE", actionListener);

ambuzr

valeu vini tambem tava atras dessa dica deu certin aqui no NetBeans

fiz assim, criei um metodo chamdo fechar

public void fechar(){
        
        KeyStroke stroke = KeyStroke.getKeyStroke("F8");
 actionListener = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
    JOptionPane.showMessageDialog(null, "Voce apertou uma tecla");
   }
};
InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, "CLOSE");
rootPane.getActionMap().put("CLOSE", actionListener);
}

então depois de initComponents coloquei assim, não esqueça de importar as classes q ele precisa o netbeans diz quais são

public principal() {
        initComponents();
        
        fechar();// SO FIZ CHAMAR O METODO QUE CRIEI
        }

Brigadão novamente tava doido atras dessa dica, ia colocar um KeyEvent em todos os meus botões e campos maior gambiarra
:lol:

ambuzr

encontrei dessa forma

public void verificarF8(){
      
  
   getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F8"), "fireDoFindNext");  
         getRootPane().getActionMap().put("fireDoFindNext", new AbstractAction("fireDoFindNext") {  
                 // The next two lines should be in one line  
                 public void actionPerformed(ActionEvent evt) {  
                     System.out.println("F8");  
                 }  
             }  
         );  
    
      }

porem como e que eu faço pra cada tecla uma ação, por exemplo, precissonar F2 mostrar System.out.println("F2") e precissonar F8 mostrar System.out.println("F8") ?

rafaelbtz

Só uma dúvida estou executando esse código do ViniGodoy, ta funcionando blz, mas se o foco estiver em uma JTable ai não funciona alguem sabe por que?

Obrigado…

Criado 12 de agosto de 2008
Ultima resposta 16 de set. de 2008
Respostas 5
Participantes 5