Tastenkombis, KeyStrokes und ActionMaps..

subn0de

Mitglied
Hallo,

ich versuche gerade Tastenkombinationen zu implementieren. Leider finde ich dazu nicht viel, und die API verstehe ich auch nicht. Solange ich nur eine Tastenkombi habe funktioniert diese ohne Probleme, aber sobald es mehr werden..ich weiss einfach nicht mehr weiter ;(
Wäre super wenn sich das jemand Anschauen könnte, der sich damit auskennt.
Hier eine kleine Testklasse:

Java:
import java.awt.event.ActionEvent;

import javax.swing.*;

public class keyframe {
	JFrame frame;
	JTextArea text;
	public static void main(String[] args) throws Exception {
		keyframe key = new keyframe();
		key.start();
	}
	public void start() {
		JPanel panel = new JPanel();
		frame = new JFrame();
		text = new JTextArea(10,10);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		frame.setSize(300, 300);
		frame.add(panel);
		panel.add(text);
		Action strgma = new AbstractAction(){
			public void actionPerformed(ActionEvent kevtm) {
				textBla();
                                
				
			}
		};
		Action strgna = new AbstractAction(){
			public void actionPerformed(ActionEvent kevtn) {
				textBla2();
			}
		};
		KeyStroke strgm = KeyStroke.getKeyStroke("control M");
		InputMap imap = panel.getInputMap();
		imap.put(strgm, imap);
		ActionMap amap = panel.getActionMap();
		amap.put(imap, strgma);
		KeyStroke strgn = KeyStroke.getKeyStroke("control N");
		InputMap imap2 = panel.getInputMap();
		ActionMap amap2 = panel.getActionMap();
		imap2.put(strgn, imap2);
		amap2.put(imap2, strgna);
	}
	public void textBla() {
		text.append("strg + m");
	}
	public void textBla2() {
		text.append("strg + n");
	}
}
 
Zuletzt bearbeitet:

Ravendark

Aktives Mitglied
Probier mal folgendes:
Java:
// Erzeugt das Tastenkürzel Strg+C
KeyStroke.getKeyStroke('C', InputEvent.CTRL_DOWN_MASK);
// Erzeugt das Tastekürzel Alt+A
KeyStroke.getKeyStroke('A', InputEvent.ALT_DOWN_MASK);
 

subn0de

Mitglied
Ich habe es nun etwas unpraktischer über einen Keylistener gelöst, für mein aktuelles Projekt reicht das aus:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class KeyboardShortcuts implements KeyListener{
	JFrame frame;
	JTextArea text;
	boolean strgp, jp, kp, lp;
	public static void main(String[] args) throws Exception {
		KeyboardShortcuts key = new KeyboardShortcuts();
		key.start();
	}
	public void start() {
		strgp=false;
		jp=false;
		kp=false;
		lp=false;
		JPanel panel = new JPanel();
		frame = new JFrame();
		text = new JTextArea(10,10);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		frame.setSize(300, 300);
		frame.add(panel);
		panel.add(text);
		text.addKeyListener(this);

	}

	@Override
	public void keyPressed(KeyEvent e) {
		text.append("\n"+"pressed: "+e.getKeyText(e.getKeyCode())+" ");
		String pressedstr = e.getKeyText(e.getKeyCode());
		
		if (pressedstr.matches("Strg")){
			strgp=true;
		} else if (pressedstr.matches("J")){
			jp = true;
		} else if (pressedstr.matches("K")){
			kp = true;
		} else if (pressedstr.matches("L")){
			lp = true;
		}
		chooseAction(strgp, jp, kp, lp);
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		text.append("\n"+"released: "+e.getKeyText(e.getKeyCode())+" ");
		String pressedstr = e.getKeyText(e.getKeyCode());
		
		if (pressedstr.matches("Strg")){
			strgp=false;
		} else if (pressedstr.matches("J")){
			jp = false;
		} else if (pressedstr.matches("K")){
			kp = false;
		} else if (pressedstr.matches("L")){
			lp = false;	
		}
		chooseAction(strgp, jp, kp, lp);
	}
	@Override
	public void keyTyped(KeyEvent e) {
		
	}
	public void chooseAction(boolean strgp, boolean jp, boolean kp, boolean lp) {
		System.out.println("strg: "+strgp);
		System.out.println("j: "+jp);
		if (strgp=jp) {
			strgJAction();
		} else if (strgp=kp) {
			strgKAction();
		} else if (strgp=lp) {
			strgLAction();
		}
	}

	public void strgJAction(){
		text.append("\n strgJAction");
	}
	public void strgKAction(){
		text.append("\n strgKAction");
	}
	public void strgLAction(){
		text.append("\n strgLAction");
		
	}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N KeyStrokes Ereignisbehandlung Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben