# KeyListener Beispiel



## Viewty-Fan (26. Jul 2010)

Hallo,
ich programiere einen Taschenrechner. DieTasten 1-9 sind mit Buttonlistenern geschrieben. Jetzt will ich, dass ich die Zahlen und Zeichen auch mit dem Nummernblock eingeben kann. Das wollte ich mit Keylistener realisieren, doch ich weiß nicht genau, wie ich es umsetzen soll.


Habt ihr da eine Lösung/Programmbeispiel?

Viewty-Fan


----------



## Final_Striker (26. Jul 2010)

JAVA: 14.2.3 Tastatureingaben

How to Write a Key Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)


----------



## Michael... (26. Jul 2010)

Denke, dass dafür Key bindings besser geeignet sind:
How to Use Key Bindings (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features)


----------



## Viewty-Fan (26. Jul 2010)

bis jetzt bin ich soweit... Wie bekomme ich es jetzt hin, dass er auf die Taste "0" reagiert?
Das ganze soll in dem Textfeld "Display" angezeigt werden. 


```
public class KeyListenerTest implements KeyListener {
		
	    
	    public KeyListenerTest() {
        	String oldString=Display.getText(); 
        	String newString= oldString+"0";
        	Display.setText(newString);  
	    	
	    }
```

Wie kann ich ihn danach adden? Ich verstehe dabei nicht was das this macht.


```
Display.addKeyListener(this);
```


----------



## Michael... (27. Jul 2010)

this ist eine Referenz auf das aktuelle Objekt in dem Du Dich zum Aufrufzeitpunkt befindest - und würde in dem Fall nur Sinn machen, wenn Display (Variablennamen sollten mit einem Kleinbuchstaben anfangen) das Interface KeyListener implementiert.

Hier mal ein Bsp. wie man an ein TextField einen anonymen KeyListener anhängen kann. 

```
JTextField textField = new JTextField();
textField.addKeyListener(new KeyListener() {
	public void keyPressed(KeyEvent e) {
		System.out.println(e.getKeyChar() + " pressed");
	}
	public void keyReleased(KeyEvent e) {
		System.out.println(e.getKeyChar() + " released");
	}
	public void keyTyped(KeyEvent e) {
		System.out.println(e.getKeyChar() + " typed");
	}
});
```
Ein KeyListener reagiert nur, wenn die Komponente den Fokus hat, daher bin ich immer noch der Meinung, dass in Du eigentlich Key Bindings brauchst statt Listener. Dein Vorhaben, was ich aus Deinen Codefragmenten glaube zu schliessen, macht mit einem KeyListener an der Komponente in die die Werte eingetragen werden wenig Sinn.


----------



## Mrtwomoon (14. Jun 2012)

Hallo zusammen,
ich habe ein Suchen-Button und ein Suchfeld 
ich möchte in Suchfeld etwas schreiben und auf Eingabetaste drücke soll es funktionieren also ich möchte Suchen-Button mit KeyListener binden und habe ich folgende Code

[JAVA=42]
suchen_button = new JButton("Suchen")
   .
   .
   .

suchen_button.addKeyListener(new KeyListener() {
	        public void keyPressed(KeyEvent e) {
	        	buttonBerechneClicked();

	        }
	        public void keyReleased(KeyEvent e) {

	        }
	        public void keyTyped(KeyEvent e) {

	        }
});

public void buttonBerechneClicked(){
		conn = getInstance();
		ArrayList studenten = new ArrayList();
		// Anfrage-Statement erzeugen.
		Statement query;
		try {
            query = conn.createStatement();

		    String name =person_suchen.getText();
		    String sql ="SELECT * FROM student WHERE Vorname = '"+name + "' OR Nachname='"+name+"'";

		    ResultSet result= query.executeQuery(sql);
		//    if (result==null){                       //TODO: gib aus wenn keinen Eintrag trifft
		 //   	ergebnis_feld.setText("diese Eintrag existiert in DB nicht...");
		  //  }else{

		    ergebnis_feld.setText("");
		    while (result.next()) {
              String first_name = result.getString("Vorname"); // Alternativ: result.getString(1);
              String last_name  = result.getString("Nachname"); // Alternativ: result.getString(2);
              String name_result = "  "+last_name + ", " + first_name+"\n";

            //  schreibInErgebnis(name);

		     //   ergebnis_feld.append(name_result); 
              ergebnis_feld.setText(ergebnis_feld.getText()+"\n "+name_result);
            }
		   // } //else 
		} catch (SQLException e) {
            e.printStackTrace();
        }

	}

[/code]

wäre sehr nett wenn jemand mir sagen kann, was für ein Fehler ich hier mache
danke für Hilfe


----------



## Clayn (14. Jun 2012)

Du willst also das wenn man im Textfeld auf Enter drückt was passiert oder beim Button?
Im ersten Fall musst du dem Textfeld den KeyListener zuweisen und musst überprüfen ob die gedrückte Taste die Entertaste ist, ansonsten wird die Methode bzw das was im KeyListener immoment steht immer ausgeführt bei jedem Tastendruck


----------



## Mrtwomoon (14. Jun 2012)

ich schreibe im Suchfeld ein Name und drücke auf Enter-Taste also ich will nicht extra mit Maus auf die Suchen-Button gehen und klicken
aber reagiert nicht egal auf welche taste ich drücke.....

zum Beispiel mit diese zeilen code funktioniert es

[JAVA=42] 
 suchen_button.addActionListener(new ActionListener(){

	    	public void actionPerformed (ActionEvent arg0){
	    		buttonBerechneClicked();
	    	}
 });
[/code]


----------



## LukHaimb27 (14. Jun 2012)

du willst dass der button ausgelöst wird wenn du enter drückst?


----------



## Mrtwomoon (14. Jun 2012)

LukHaimb27 hat gesagt.:


> du willst dass der button ausgelöst wird wenn du enter drückst?



genau :applaus:


----------



## LukHaimb27 (14. Jun 2012)

```
person_suchen.addActionListener(new ActionListener(){
            
            public void actionPerformed (ActionEvent arg0){
                buttonBerechneClicked();
            }
 });
```

?
dann einfach im Textfeld enter drücken


----------



## Mrtwomoon (14. Jun 2012)

super 
danke dir 
:toll:


----------



## rooonny (2. Jul 2014)

Hallo.. da Ronny ist es.

Ich habe jetzt auch mein Programm fertig geschrieen... hat etwas länger gedauert als gedacht, aber wenigstens gehts jetzt. Und nun wollte ich das Programm mit den Tasten auf der Tastatur stueren, damit man nicht immer die Maus in die Hand nehmen muss. Ich habe in dem Thread das:


```
person_suchen.addActionListener(new ActionListener(){
               
                public void actionPerformed (ActionEvent arg0){
                    buttonBerechneClicked();
                }
     });
```

gefunde... aber ich werde nicht schlau draus. Ich habe zum Beispiel einen Button der OK heißt. den möchte ich gerne mit Enter "drücken", aber wo lege ich denn fest, dass das mit Enter passieren soll?

Da Ronny


----------



## rooonny (5. Jul 2014)

Ist die Frage echt so komsich? Oder sehe ich den Wald vor lauter Bäumen nicht? Wo kann ich denn die Taste auswählen?

Da Ronny


----------

