Input från tangentbordet

Klassen KeyAdapter i Java gör det möjligt att ta in inputs från tangentbordet. 

Hur fungerar KeyAdapter i Java?

Nu vill vi göra vill vi göra det möjligt för användaren att manövrera spelet med hjälp av tangentbordet (det hade varit ett ganska tråkigt spel annars).

  • Ett vanligt sätt att åstadkomma detta är att använda sig av Javas inbyggda klass KeyAdapter. Det är en klass som används för att ta emot input från tangentbordet.
  • Vi kommer även att använda den inbyggda klassen KeyEvent.  När en tangent trycks, släpps eller skrivs, aktiveras den relevanta metoden i lyssnarobjektet och KeyEvent överförs sedan till den.
  • Vi skapar sedan en ny egen klass, KeyInput, som kommer att hantera alla knapptryck i spelet.

Men nu böjar vi helt enkelt med att importera klassen KeyAdapter och KeyEvent.

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
  • Efter det så skapar vi sedan våran klass KeyInput. Den klassen vi skapar kommer då att ärva (extends) klassen KeyAdapter och således få tillgång till dom objekten.
  • Vi skapar även ett objekt kallat game
  • Sedan så initierar vi konstruktorn som kommer ta det objektet game som instansvariabel
public class KeyInput extends KeyAdapter {     

    Game game;

    //Konstruktorn tar objektet game som instansvariabel
    public KeyInput(Game game){                
        this.game = game;

Slutligen så skapar vi två metoder. En för vad som ska hända när en tangent trycks ned, och en för vad som ska hända när en tangent släpps.

    public void keyPressed(KeyEvent e){ 
        //Kopplar tangenttryckningen till objektet game  
        game.keyPressed(e);  
    } 

    public void keyReleased(KeyEvent e){ 
        //Kopplar kommandot till objektet game    
        game.keyReleased(e);  
    } 
}

Hela koden med tillhörande kommentarer hittar du nedan.

import java.awt.event.KeyAdapter;              //Infogar klasserna
import java.awt.event.KeyEvent;                //Infogar klasserna

public class KeyInput extends KeyAdapter {     //Ärver klassen KeyAdapter som gör det möjligt att ta inputs från tangentbordet

    Game game;

    public KeyInput(Game game){                //Konstruktorn tar objektet game som instansvariabel
        this.game = game;
    }

    public void keyPressed(KeyEvent e){        //Vad ska hända när en tangent trycks ner?
        game.keyPressed(e);                    //Kopplar tangenttryckningen till objektet game
    }

    public void keyReleased(KeyEvent e){       //Vad ska hända när en tangent släps?
        game.keyReleased(e);                   //Kopplar kommandot till objektet game
    }

}

Hur fungerar KeyEvent i Java?

Vi skapade våran KeyInput klass ovan som innehåller två metoder, en för när vi trycker ned en tangent och en för när vi släpper en tangent. Men nu vill vi göra så att programmet faktiskt känner av vilken tangent det är som trycks ned.

Vi kommer använda de inbyggda metoderna VK_LEFT och VK_RIGHT som finns i KeyEvent för att känna av ifall det är Vänster- respektive Höger piltangent som används

Input Keyboard Java

Låt oss börja med skapa en metod för att känna av ifall en tangent är nedtryckt

public void keyPressed(KeyEvent e){                                          

    //Nytt tangenttryck
    int key = e.getKeyCode();                                                

    //Om vi trycker höger
    if (key == KeyEvent.VK_RIGHT) {                                          
        System.out.println("Höger piltangent trycks ner");
    } 
    //Om vi trycker vänster
    else if (key == KeyEvent.VK_LEFT) {                                    
        System.out.println("Vänster piltangent trycks ner");
    }
}

Sedan så gör vi på liknande sätt för när vi ska känna av ifall en tangent släpps

public void keyReleased(KeyEvent e){                                         

    //Ny tangent har släppts
    int key = e.getKeyCode();                                                

    //Om vi släpper högertangenten
    if(key == KeyEvent.VK_RIGHT){                                            
        System.out.println("Höger piltangent släpps");
    }

    //Om vi släpper vänstertangenten
    else if(key == KeyEvent.VK_LEFT){                                        
        System.out.println("Vänster piltangent släpps");
    }
}

Notera, vi kan självklart göra motsvarande för andra tangenter. På Oracle hemsida för KeyEvent finns lista på kommandon för övriga tangenter

Hela koden för våra två metoder med tillhörande kommentarer hittar du nedan.

public void keyPressed(KeyEvent e){    // När vi trycker ned en tangent                                      

    //Nytt tangenttryck
    int key = e.getKeyCode();                                                

    //Om vi trycker höger
    if (key == KeyEvent.VK_RIGHT) {                                          
        System.out.println("Höger piltangent trycks ner");
    } 
    //Om vi trycker vänster
    else if (key == KeyEvent.VK_LEFT) {                                    
        System.out.println("Vänster piltangent trycks ner");
    }
}

public void keyReleased(KeyEvent e){  // När en tangent släpps                                        

    //Ny tangent har släppts
    int key = e.getKeyCode();                                                

    //Om vi släpper högertangenten
    if(key == KeyEvent.VK_RIGHT){                                            
        System.out.println("Höger piltangent släpps");
    }

    //Om vi släpper vänstertangenten
    else if(key == KeyEvent.VK_LEFT){                                        
        System.out.println("Vänster piltangent släpps");
    }
}

För mer information och listor på olika metoder så rekommenderar vi  Oracle hemsida för KeyAdapter och KeyEvent.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!