[RESOLVIDO]Como usar teclas de atalho como ctr s em jButtons?

Como posso adicionar teclas de atalho pro usuário não ter de clicar no mouse, simplesmente apertar uma tecla do teclado?

Ficaria bem mais prático na calculadora abaixo.

[code]package calculator_swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
/**
*

  • @author 1193899
    */
    public class Main {
    public static JFrame frame; // frame
    public static JTextField visu; // visor
    public static JButton bt1,bt2,bt3,bt4,bt5,bt6,bt7,bt8,bt9,bt0; //Botões para a calculadora;
    public static JButton btsoma, btdiv, btmul, btsub, btlimp, btvirg,btneg; // botoes de ações
    public static JButton igual,posNeg,virgula;
    static char op;
    static String temp;
    static double num1,num2,res,temp2;

    public static void main(String[] args) {

    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);
    frame.setTitle("CALCULADORA");
    frame.setSize(275,400);
    
    
    visu=new JTextField();
    visu.setBounds(20,20,230,25);
    visu.setVisible(true);
    frame.add(visu);
    
    btsoma=new JButton();
    btsoma.setText("+");
    btsoma.setBounds(200,60,50,50);
    btsoma.setVisible(true);
    btsoma.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
               temp=visu.getText();
               num1=Double.parseDouble(temp);
               op='+';
               visu.setText("");
          }
             
        });
    frame.add(btsoma);
    
    btsub=new JButton();
    btsub.setText("-");
    btsub.setBounds(200,120,50,50);
    btsub.setVisible(true);
    frame.add(btsub);
    btsub.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
                temp=visu.getText();
             num1=Double.parseDouble(temp);
               op='-';                
               visu.setText("");
          }
             
        });
    
    btmul=new JButton();
    btmul.setText("*");
    btmul.setBounds(200,180,50,50);
    btmul.setVisible(true);
    frame.add(btmul);
    btmul.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
                  temp=visu.getText();
               num1=Double.parseDouble(temp);
               op='*';              
               visu.setText("");
          }
             
        });
    
    btdiv=new JButton();
    btdiv.setText("/");
    btdiv.setBounds(200,240,50,50);
    btdiv.setVisible(true);
    frame.add(btdiv);
    btdiv.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
                    temp=visu.getText();
               num1=Double.parseDouble(temp);
               op='/';   
               visu.setText("");
              
          }
             
        });
    
    
    btlimp=new JButton();
    btlimp.setText("C");
    btlimp.setBounds(20,60,170,50);
    btlimp.setVisible(true);
    frame.add(btlimp);
    btlimp.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
          
      temp="";
      num1=0;
      num2=0;
      res=0;
      temp2=0;
         visu.setText("");
              
          }
             
        });
    
    bt1=new JButton();
    bt1.setText("1");
    bt1.setBounds(20,240,50,50);
    bt1.setVisible(true);
     bt1.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
            temp=visu.getText();
            temp=temp+"1";
            visu.setText(temp);
              
          }
             
        });  
    frame.add(bt1);
    
    bt2=new JButton();
    bt2.setText("2");
    bt2.setBounds(80,240,50,50);
    bt2.setVisible(true);
    frame.add(bt2);
    bt2.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
             temp=visu.getText();
            temp=temp+"2";
            visu.setText(temp);                
              
          }
             
        });
    
    bt3=new JButton();
    bt3.setText("3");
    bt3.setBounds(140,240,50,50);
    bt3.setVisible(true);
    frame.add(bt3);
    bt3.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
            temp=visu.getText();
            temp=temp+"3";
            visu.setText(temp);                
              
          }
             
        });
    
    bt4=new JButton();
    bt4.setText("4");
    bt4.setBounds(20,180,50,50);
    bt4.setVisible(true);
    frame.add(bt4);
    bt4.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
             temp=visu.getText();
            temp=temp+"4";
            visu.setText(temp);                
              
          }
             
        });
    
    bt5=new JButton();
    bt5.setText("5");
    bt5.setBounds(80,180,50,50);
    bt5.setVisible(true);
    frame.add(bt5);
    bt5.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
              temp=visu.getText();
            temp=temp+"5";
            visu.setText(temp);               
              
          }
             
        });
    
    bt6=new JButton();
    bt6.setText("6");
    bt6.setBounds(140,180,50,50);
    bt6.setVisible(true);
    frame.add(bt6);
    bt6.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
             temp=visu.getText();
            temp=temp+"6";
            visu.setText(temp);                
              
          }
             
        });
    
    bt7=new JButton();
    bt7.setText("7");
    bt7.setBounds(20,120,50,50);
    bt7.setVisible(true);
    

    frame.add(bt7);
    bt7.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    temp=temp+“7”;
    visu.setText(temp);

          }
             
        });
    
    
    bt8=new JButton();
    bt8.setText("8");
    bt8.setBounds(80,120,50,50);
    bt8.setVisible(true);
    

    frame.add(bt8);
    bt8.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    temp=temp+“8”;
    visu.setText(temp);

          }
             
        });
    
    bt9=new JButton();
    bt9.setText("9");
    bt9.setBounds(140,120,50,50);
    bt9.setVisible(true);
    

    frame.add(bt9);
    bt9.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    temp=temp+“9”;
    visu.setText(temp);

          }
             
        });
    
    bt0=new JButton();
    bt0.setText("0");
    bt0.setBounds(20,300,50,50);
    bt0.setVisible(true);
    

    frame.add(bt0);
    bt0.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    temp=temp+“0”;
    visu.setText(temp);

          }
             
        });
    
    virgula=new JButton();
    virgula.setText(",");
    virgula.setBounds(80,300,50,50);
    virgula.setVisible(true);
    

    frame.add(virgula);
    virgula.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    temp=temp+".";
    visu.setText(temp);

          }
             
        });
    
    igual=new JButton();
    igual.setText("=");
    igual.setBounds(140,300,50,50);
    igual.setVisible(true);
    

    frame.add(igual);
    igual.addActionListener((ActionListener) new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    temp=visu.getText();
    num2=Double.parseDouble(temp);
    switch(op){
    case ‘+’:
    res=num1+num2;
    break;
    case ‘-’:
    res=num1-num2;
    break;
    case ‘/’:
    res=num1/num2;
    break;
    case '’:
    res=num1
    num2;
    break;
    }
    visu.setText(""+res);

          }
             
        });
    
    posNeg=new JButton();
    posNeg.setText("+ -");
    posNeg.setBounds(200,300,50,50);
    posNeg.setVisible(true);
      frame.add(posNeg);  
    posNeg.addActionListener((ActionListener) new ActionListener() {  
          public void actionPerformed(ActionEvent evt) {  
              temp=visu.getText();
              temp2=Double.parseDouble(temp);
              temp2=temp2*-1;
              visu.setText(""+temp2);
              
          }
             
        });
      
        
    
    frame.setVisible(true);
    

    }

} [/code]

Esses tipos de atalho (os accelerators), só existem para itens de menu.
Entretanto vc pode registrar um keylistener no painel que contém os botões por exemplo, e então tratar isso.

[]´s

[quote=davidbuzatto]Esses tipos de atalho (os accelerators), só existem para itens de menu.
Entretanto vc pode registrar um keylistener no painel que contém os botões por exemplo, e então tratar isso.

[]´s[/quote]

Sim, mais com que comandos?

Dê uma olhada nesse tópico: http://www.guj.com.br/posts/list/140986.java

Valeu, agora consegui fazer eventos com o teclado, só tive de alterar porque estava escrevendo - ao invez de acionar o evento do botão -;