Avatar billede madiedk Nybegynder
30. april 2009 - 10:16 Der er 6 kommentarer og
1 løsning

java multi keystroke

Hej

jeg har følgende kode:

        jPanel1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_M ,InputEvent.ALT_DOWN_MASK), "_F");
        jPanel1.getActionMap().put("_F", new AbstractAction(){
            public void actionPerformed(ActionEvent ae){
                System.out.println("hej");
            }
        });


nu skriver den "hej" hvis jeg trykke "m" og "alt" tasten ned.
Hvordan laver jeg hvis man ska trykke "m"  "u" og "alt"?
Avatar billede arne_v Ekspert
30. april 2009 - 15:10 #1
Saa vidt jeg ved kan man ikke teste paa ALT+M+U men du kan teste paa ALT+M og ALT+U. Og saa maa du definere at ALT+M efterfulgt af ALT+U eller ALT+U efterfulgt af ALT+M goer det du vil.
Avatar billede arne_v Ekspert
05. juli 2009 - 18:24 #2
Kommet videre ?
Avatar billede madiedk Nybegynder
25. august 2009 - 15:27 #3
kan du give et kode eksempel,  jeg forstår det i teorien, men ik hvordan det skal kodes.
Avatar billede arne_v Ekspert
25. august 2009 - 16:50 #4
Jeg kan proeve og bixe noget senere.
Avatar billede arne_v Ekspert
26. august 2009 - 05:21 #5
Simpel demo:

package august;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

public class MultiKeys extends JFrame {
    private final static int WAITING_ALTM = 1;
    private final static int WAITING_ALTU = 2;
    private JPanel p;
    private int state;
    public MultiKeys() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        setTitle("Multi key demo");
        p = new JPanel();
        p.add(new JLabel("Press ALT/M and ALT/U"));
        p.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_M ,InputEvent.ALT_DOWN_MASK), "_ALTM");
        p.getActionMap().put("_ALTM", new AbstractAction(){
            public void actionPerformed(ActionEvent ae){
                if(state == WAITING_ALTM) {
                    JOptionPane.showMessageDialog(null, "ALT/M pressed");
                    state = WAITING_ALTU;
                } else {
                    JOptionPane.showMessageDialog(null, "Press ALT/U !!!!");
                }
            }
        });
        p.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_U ,InputEvent.ALT_DOWN_MASK), "_ALTU");
        p.getActionMap().put("_ALTU", new AbstractAction(){
            public void actionPerformed(ActionEvent ae){
                if(state == WAITING_ALTU) {
                    JOptionPane.showMessageDialog(null, "ALT/U pressed");
                    state = WAITING_ALTM;
                } else {
                    JOptionPane.showMessageDialog(null, "Press ALT/M !!!!");
                }
            }
        });
        getContentPane().add(p, BorderLayout.CENTER);
        setSize(600, 400);
        state = WAITING_ALTM;
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new MultiKeys();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede madiedk Nybegynder
26. august 2009 - 14:51 #6
tak, smid et svar
Avatar billede arne_v Ekspert
26. august 2009 - 14:57 #7
svar
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