Tastatur Aktion

DownTheHill

Mitglied
Hallo Forum,

Ich habe mal eine generelle Frage zu einem bestimmten Problem.

Und zwar habe ich mit Java eine Oberfläche erstellt, die einen Knopf hat, welcher eine bestimmte Aktion durchführt sobald auf ihn geklickt wird.
Jetzt möchte ich aber gerne, dass ich nicht direkt mit der Maus auf den Button klicken muss, sondern eifnach eine Taste auf der Tastatur drücken kann, damit der Button aktiviert wird.

Ich hoffe ihr könnt mir weiterhelfen.

Gruß

DownTheHill
 

DownTheHill

Mitglied
Meine bisherige Idee:

Java:
     meinbutton.addKeyListener( new KeyListener()
    {
      public void keyPressed( KeyEvent arg0 ){

           // die Aktion, die dann durchgeführt werden soll
     }

      public void keyReleased( KeyEvent arg0 ){

          // die Aktion, die dann durchgeführt werden soll
      }

      public void keyTyped( KeyEvent arg0 ){

         // die Aktion, die dann durchgeführt werden soll
     }
    });

Damit habe ich ja aber nur erreicht, dass ich mit den Nummern 1-9 die Leertaste ersetzt habe.

Ich möchte aber, dass wenn ich "a" drücke der 1.Button aktiviert wird und wenn ich "b" drücke der 2.Button aktiviert wird.
Was muss ich dazu tun?

Danke für Antworten

Gruß

DTH
 

Volvagia

Top Contributor
Solche KeyListener eignen sich grundsätzlich nicht für Programme, die Komponenten beinhalten, die sich den Focus schnorren (z. B. Buttons und TextFelder), da er nur ausgelöst wird, falls der Komponent auf dem er registriert ist den Focus hat.
Globale KeyBindings sind - soweit ich sie kenne - meistens nativ implementiert und deshalb so gut wie nicht plattformunabhängig.

Zeig mal, wie du die Mnemonic registrieren wolltest.
 

DownTheHill

Mitglied
Danke ersteinmal für die Antwort.

So wie ich das mit den Mnemonic verstanden habe ist nur diese Zeile notwendig:
Java:
meinButton.setMnemonic(KeyEvent.VK_A);

Aber das klappt bei mir nicht. Wäre ja auch irgendiwe zu einfach :D

Reicht diese Zeile oder brauche ich noch mehr?

Gruß

DTH
 

127.0.0.1

Bekanntes Mitglied
ok, sry, mein Fehler

dann das selbe ebend mit dem KeyListener

keyPressed


Java:
void keyPressed(KeyEvent e)

    // Invoked when a key has been pressed. See the class description for KeyEvent for a definition of a key pressed event.

;)

Gruß
 

DownTheHill

Mitglied
"Volvagia" meinte ja aber, dass der KeyListener sich nicht so gut eignet.
Ich habe halt 2 Button. Beide sollen die Möglichkeit bekommen durch verschiedene Tasten aktiviert zu werden.

Er meinte mit Mnemonics komme ich eher zum Ziel.

Ich selber weiß nicht was für meine Anwendung zielführender ist.

Was denkt ihr?

Gruß

DTH
 

127.0.0.1

Bekanntes Mitglied
du könntest auch ein Thread im Hintergrund laufen lassen der immer "hört" ob eine Taste gedrückt wurde, und dann halt eine Aktion ausführen
 

127.0.0.1

Bekanntes Mitglied
Aber wie mache ich das genau?

gute Frage ^^
Threads in Java

Allzugut kenn ich mich bei Threads auch nicht aus, weiß nur wie sie gestartet und angehalten werden....
Würde aber versuchen den KeyListener in einen Thread zu packen

Java:
class TestThread extends Thread {
  
    public void run() {
      //hier die while oder for Schleife {
        try {
          sleep(100);
        }
        catch(InterruptedException e) {
        }
        // und hier der KeyListener
      }
    }
  
  }

bitte nicht für den Code schlagen, bin kein Thread-Experte ;)
 

Volvagia

Top Contributor
Du willst im Thread einen KeyListener registrieren, nur um ihm dort abzufangen, obwohl Listener-Methoden sowieso vom EDT abgearbeitet werden? :autsch:

Falls du einen KeyListener benutzt wird er am Frame nichtmehr funktionieren, sobald du in ein TextField klickst und am TextField, sobald du einen Button etc. anklickst. Du müsstest ihm quer durchs ganze Programm anheften. Bei Buttons kannst du noch deaktivieren, dass er sich den Focus schnappt, bei Textfeldern geht das aber nicht.

Java:
package org.javaforum.downthehill;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class KeyExample {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				build();
			}
		});
	}
	private static void build() {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton[] buttons = new JButton[2];
		
		buttons[0] = new JButton("Alt + A");
		buttons[0].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "Button A wurde gedrückt");
			}
		});
		buttons[0].setMnemonic('a');
		frame.add(buttons[0], BorderLayout.NORTH);
		
		buttons[1] = new JButton("Alt + B");
		buttons[1].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "Button B wurde gedrückt");
			}
		});
		buttons[1].setMnemonic('b');
		frame.add(buttons[1], BorderLayout.SOUTH);
		
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}
 

DownTheHill

Mitglied
Danke ersteinmal für die Antwort.

Sieht recht komplizeirt aus :D Geht das mit Mnemonic nicht einfacher?
Bin nämlich nicht so der Genie im Programmieren.

Gruß

DTH
 

127.0.0.1

Bekanntes Mitglied
LOL, das kannt ich noch gar nicht ^^
schau ich mich mal um, sieht interessant aus ;)

Zurück zum Thema

@DownTheHill: schon weitergekommen ?
Oder noch fragen ?
 

ESCS

Mitglied
Registrier einen AWTEventListener via Toolkit.addAWTEventListener:

Java:
AWTEventListener ael = new AWTEventListener() {
	public void eventDispatched( AWTEvent event ) {
		//Verarbeitung des Events
	}
};
Toolkit.getDefaultToolkit().addAWTEventListener( ael, AWTEvent.KEY_EVENT_MASK );

Dadurch kannst du alle KeyEvents empfangen & verarbeiten. Anschließend könntest du über JButton.doClick(); einen Klick simulieren (oder den entsprechenden Code direkt im AWTEventListener ausführen).
 

DownTheHill

Mitglied
Vielen Dank an alle die mir geholfen haben!
Ich werde mich jetzt mal hinsetzen und mir die Vorschläge anschauen.

@volvagia
Vielen Danke für den Link, habe ich übersehen. Tut mir Leid.

Gruß

DTH
 

DownTheHill

Mitglied
Die Benutzeroberfläche von meinem schon bestehenden Programm ahbe ich über die AWT Funktion erstellt.
Mein einer Button ist ein normaler Button und heißt "Start". Kann ich irgendwie sagen, dass
Java:
 buttons[0] =  Start
ist? buttons[0] ist ja nämlich ein JButton.

Gruß

DTH
 

Volvagia

Top Contributor
Ich glaube nicht, dass AWT Mnemonic unterstützt. Dann musst du wohl einen KeyListener überall anheften, ESCS Methode benutzen oder auf so eine Keybinding-Api zurückgreifen.

Allerdings würde ich dir von AWT abraten. Einerseits wird es vom OS gerendert und ist nicht so plattformunabhängig, andererseits basiert Swing auf AWT, deshalb kannst du dort grundsätzlich alles, was du mit AWT kannst und hast noch ein paar weitere Möglichkeiten. z. B. Methoden, die auf dem ersten Blick nicht viel her machen, aber das Leben doch vereinfachen können. Als erstes Beispiel fällt mir da spontan die DefaultCloseOperation ein.
 

DownTheHill

Mitglied
Das ist natürlich ganz blöd.
Ich habe keine Ahnung wie man anders als mit AWT Benutzeroberflächen macht.

Wie würdest du denn überall KeyListener anbinden?

Gruß

DTH
 

DownTheHill

Mitglied
Ich weiß zwar nicht was du mit dem letzten Beitrag meinst, aber wird schon richtig sein.
Ich habe es jetzt aufjedenfall hinbekomen. Ich hatte schon am Anfang als du mir die Mnemonic gezeicht hast fast alles richtig. Einziger Fehler war, dass ich AWT und nicht Swing verwendet habe. Habe es nun geändert und es funktioniert super.

Vielen Dank !!

Gruß

DTH
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java die Tastatur übernehmen lassen Allgemeine Java-Themen 5
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
S Input/Output Tastatur als Midi-Keyboard Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
M Swing Virtuelle Tastatur mit Accents Allgemeine Java-Themen 9
P Matrix von Tastatur in 2D Array??? Allgemeine Java-Themen 7
R Java Tastatur überwachung Allgemeine Java-Themen 2
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
X Motor mit Tastatur ansteuern Allgemeine Java-Themen 5
H tastatur von englisch auf deutsch stellen Allgemeine Java-Themen 3
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
J Java reagiert nicht mehr auf die Tastatur Allgemeine Java-Themen 2
F JavaProgramm mit der Tastatur Steuern Allgemeine Java-Themen 3
G Tastatur abfrage Allgemeine Java-Themen 8
A Listener Tastatur Allgemeine Java-Themen 3
D Suche "virtuelle Tastatur" Allgemeine Java-Themen 3
T Tastatur global abfragen Allgemeine Java-Themen 2
M Tastatur sperren Allgemeine Java-Themen 6
F Tastatur klick klick Allgemeine Java-Themen 5
T Prozessorticks/Tastatur überwachen/ -> Wiederholbarkeit? Allgemeine Java-Themen 15
conan2 Midi: Tastatur-Klavier Allgemeine Java-Themen 2
H Tastatur eingaben verwenden Allgemeine Java-Themen 30
P Virtuelle Tastatur Allgemeine Java-Themen 5
A Serielle Schnittstelle | Barcodescan | ohne Tastatur Allgemeine Java-Themen 11
H Tastatur abhören Allgemeine Java-Themen 8
Z Programm zur Überprüfung eines Laufwerkes mit anschließender Aktion Allgemeine Java-Themen 2
A Input/Output Eine Aktion nach Keyinput nachhalten lassen Allgemeine Java-Themen 6
Developer_X JButton Aktion Allgemeine Java-Themen 5
A Jar-File startet ohne Aktion und ohne Fehlermeldung Allgemeine Java-Themen 4
G wenn Button geklickt -> regelmäßig Aktion ausführen Allgemeine Java-Themen 7
reibi Aktion Taste gedrückt abfangen Allgemeine Java-Themen 9
MQue Popup- Menue- trennen von Panel und Aktion Allgemeine Java-Themen 6
M JTextPane Mausklick auf bestimmte Wörter startet Aktion Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben