Avatar billede marvinq Nybegynder
02. juni 2006 - 19:40 Der er 2 kommentarer og
1 løsning

Oprettelse af globale genvejstaster

Hej folkens

Jeg arbejder på en JFrame som jeg gerne vil have bygget nogle "hotkeys" ind i, men er ikke helt klar over hvordan det skal fungere. Har kigget på noget med KeyListeners, men det virker kun når focus eksempelvis er grab'et på et JTextField. Findes der ikke en måde hvorpå det er muligt at hele tiden have en lytter på eksempelvis "F1-tasten", uanset hvor focus er i selve applikationen??

Håber I forstår problemet.

På forhånd tak.


MHQ.
Avatar billede _carsten Nybegynder
02. juni 2006 - 21:10 #1
Det bedste/nemmeste er nok at bruge InputMap og ActionMap

http://java.sun.com/products/jfc/tsc/special_report/kestrel/keybindings.html
http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html

Alternativt kan du skrive din egen KeyEventDispatcher.

Eksempel med InputMap/ActionMap



import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;


public class InputMap_ActionMap extends javax.swing.JFrame {

    public InputMap_ActionMap() {
        initComponents();
        panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F1"), "_F1");
        panel.getActionMap().put("_F1", new AbstractAction(){
            public void actionPerformed(ActionEvent ae){
                do_F1_Action(ae);
            }
        });
       
        setSize(300,300);
    }
                     
    private void initComponents() {
        panel = new javax.swing.JPanel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTextField1.setColumns(10);
        panel.add(jTextField1);

        jTextField2.setColumns(10);
        panel.add(jTextField2);

        getContentPane().add(panel, java.awt.BorderLayout.CENTER);

        pack();
    }                     
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new InputMap_ActionMap().setVisible(true);
            }
        });
    }
   
    private void do_F1_Action(ActionEvent ae){
        JOptionPane.showMessageDialog(this,"Du trykkede på F1");
    }
                   
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JPanel panel;
}
Avatar billede _carsten Nybegynder
10. juni 2006 - 14:07 #2
Kommet videre ??
Avatar billede marvinq Nybegynder
28. december 2012 - 13:00 #3
Hej _carsten,

Fandt anden løsning, men dit besvær fortjener helt sikkert point, for det vil også lykkedes.

Smid et svar, og vi deler.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester