Avatar billede nicas Nybegynder
13. november 2001 - 13:40 Der er 3 kommentarer og
3 løsninger

KeyListener

Hej, jeg er ved at lave en applet, og vil gerne have den til at gøre nogle specifikke ting, når der trykkes på nogle bestemte taster.
man kan på nuværende tidspunkt svare på et spørgsmål, ved at klikke på nogle knapper, men det ønskes udbyget til at man også kan bruge tasterne(fx. 1,2 og 3)
Det skal virke under awt og ikke swing.
evt. gerne et kodeexempel...
Avatar billede hbhansen Nybegynder
13. november 2001 - 13:55 #1
Hejsa, du implementere bare KeyListener til din klasse og husk at bruge alle fire metoder til:

public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
public void keyPressed(KeyEvent e)
{
  if(e.getKeyCode()==10)
    gøretelleandet();
  else if (e.getKeyCode() == 27)
    fortryd();
}

Jeg kan sige så meget at 10 er enter og 27 er esc
Hvis det ikke virker så sig til så hjælper jeg dig gerne !
Avatar billede disky Nybegynder
13. november 2001 - 13:59 #2
Kig på denne her, det er en klasse fra noget pacman jeg rodede med engang.



/*
*husk at lukke og slukke for alt der er blevet startet op, det vil sige luk for alle thread osv.
*undersøg hvordan man kan få lavet keyrepeat uden et der er et delay først
*hvis man trykker på højre pil og holder den nede skal pacman flytte sig og blive ved med det hele tiden,
*uden det normale delay inden keyrepeat !!
*/

/*Collision control
*
*Denne skal laves ved at man beregner hvor meget de enkelte ting fylder, altså ud fra koordinaterne
*på et spøgelse og på pacman, skal det beregnes om de rører hinanden, og så dør pacman.
*Det samme gælder berøring med pellets og fruits
*/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;

//Tråden i denne klasse styrer hvor tit selve skærmen skal opdateres.

public class Pacman extends DoubleBufferApplet implements java.lang.Runnable, KeyListener
{
    private Ghost ghost1,ghost2,ghost3,ghost4;
   
    private Image player;
    private Thread thread=null;
    private URL codeBase=null;

    int x=100;
    int y=100;
   
    public void init()
    {
        codeBase=getCodeBase();
        addKeyListener(this);
               
        Image tmp=getImage(codeBase,\"test.gif\");       
        ghost1=new Ghost(tmp,300,180);

        tmp=getImage(codeBase,\"test.gif\");       
        ghost2=new Ghost(tmp,340,180);
       
        tmp=getImage(codeBase,\"test.gif\");       
        ghost3=new Ghost(tmp,300,220);

        tmp=getImage(codeBase,\"test.gif\");       
        ghost4=new Ghost(tmp,340,220);

        player=getImage(codeBase,\"test.gif\");       
               
        thread=new Thread(this);
        ghost1.start();
        ghost2.start();
        ghost3.start();
        ghost4.start();
        thread.start();
        setDoubleBuffering( true );
    }
   
    public void paint( Graphics g )
    {
        g.drawImage(player,x,y,this);

        ghost1.paint(g);
        ghost2.paint(g);
        ghost3.paint(g);
        ghost4.paint(g);
    }
   
    public void run()
    {
        while(true)
        {
            repaint();
            handlePlayer();
            try
            {
                Thread.sleep(50);
            }
            catch( InterruptedException ie )
            {
            }
        }
    }
   
/** This function handles everything about the player.
* That is collision control, checking to see if a pellet or a fruit has been eaten,
* updating the score, and se if a ghost has catched the player.
*/   
    private void handlePlayer()
    { 
    }
   
    public void keyReleased(java.awt.event.KeyEvent e)
    {
    }
   
    public void keyPressed(java.awt.event.KeyEvent e)
    {
        handleKey(e);
    }
   
    public void keyTyped(java.awt.event.KeyEvent e)
    {
    }
   
    private void handleKey(KeyEvent e)
    {
        switch(e.getKeyCode())
        {
            case java.awt.event.KeyEvent.VK_LEFT:
                x-=2;
                break;
            case java.awt.event.KeyEvent.VK_RIGHT:
                x+=2;
                break;
            case java.awt.event.KeyEvent.VK_DOWN:
                y+=2;
                break;
            case java.awt.event.KeyEvent.VK_UP: //up
                y-=2;
                break;
        }
        e.consume();
    }
}
Avatar billede nicas Nybegynder
13. november 2001 - 21:37 #3
jammen skal der ikke addes en keyListener???
ligesom, fx ved xxx.addActionListener(this);
det virker i hvertfald ikke endnu...
Avatar billede nicas Nybegynder
13. november 2001 - 21:46 #4
det lykkedes mig at skrive addKeyListener(this);
men hvad mangler der så?
kodeex.
  public void keyPressed(KeyEvent e)
{

  knap.setLabel(\"det virker!!\");
}
Avatar billede elv Nybegynder
14. november 2001 - 08:58 #5
Her er et eksempel der ihvertfald virker ved mig.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Keyboard extends Applet implements KeyListener
{
  String line;

  public void init()
  {
    setLayout(new FlowLayout());
    addKeyListener(this);
  }

  public void keyPressed(KeyEvent e)
  {
    //Kode når der trykkes på en knap
    line = \"Key pressed: \" + e.getKeyText(e.getKeyCode());
    System.out.println(line);
  }

  public void keyReleased(KeyEvent e)
  {
    line = \"Key released: \" + e.getKeyText(e.getKeyCode());
    System.out.println(line);
  }

  public void keyTyped(KeyEvent e)
  {
    line = \"Key typed: \" + e.getKeyText(e.getKeyCode());
    System.out.println(line);
  }

}
Avatar billede disky Nybegynder
14. november 2001 - 09:27 #6
nicas: nej når du \'implements KeyListener\'

Så er der et interface der forlanger at de metoder skal være der, og de overloader så dem som er højere opppe i Applet hirakiet, og så kan du modtage tastetryk.

p.s. mit eksempel kører, okay du skal strippe noget væk da du mangler et par klasser.
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