SmultronMedlem sedan juli 2002431 inlägg
här är koden
import java.awt.*;
import java.awt.event.*;
public class KeyHandler implements KeyListener
{
Move move= new Move();
boolean right= false, left= false, run= false;
public void init()
{
addKeyListener( this);
}
public void keyPressed( KeyEvent ke)
{
if( ke.getKeyCode()== ke.VK_RIGHT){ right= true;}
if( ke.getKeyCode()== ke.VK_LEFT){ left= true;}
if( ke.getKeyCode()== ke.VK_UP){ run= true;}
}
public void keyReleased( KeyEvent ke)
{
if( ke.getKeyCode()== ke.VK_RIGHT) right= false;
if( ke.getKeyCode()== ke.VK_LEFT) left= false;
if( ke.getKeyCode()== ke.VK_UP) run= false;
}
public void keyTyped( KeyEvent ke){}
}
felet jag får är
KeyHandler.java:14: cannot resolve symbol
symbol : method addKeyListener (KeyHandler)
location: class KeyHandler
addKeyListener( this);
^
1 error
> Execution finished.
varför får jag det felet?
det skall vara en klass som jag ärver i en annan men borde väl inte spela nån roll?
SPiNMedlem sedan mars 20005 832 inlägg
Du har inte angett vilket objekt som ska få KeyListener.
ettObjekt.addKeyListener( this );
manganMedlem sedan feb. 2003219 inlägg
sen måste väl objektet vara en Component också? Som det är skrivet nu så är objekt av din klass inte Components
SPiNMedlem sedan mars 20005 832 inlägg
Visst måste objektet vara en Component, men så länge hans klass Move ärver från Component på något vis ( Om det nu är Move han vill använda ) så ska det fungera. Hans klass KeyHandler behöver inte vara av typen Component, endast objektet han sätter KeyListener på.
SmultronMedlem sedan juli 2002431 inlägg
så ni menar att jag ska sätta keyListenern frpn Move eller så för, för klassen KeyHandler...
SPiNMedlem sedan mars 20005 832 inlägg
Ja, alltså KeyListener'n måste fästas på något, t.ex. ett textfält eller Panel. Någon typ av Component.
SmultronMedlem sedan juli 2002431 inlägg
jaha ok, men det finns inget direkt som den kan fästas på dock...?
SPiNMedlem sedan mars 20005 832 inlägg
Jo, en klass som är eller ärver från en Component. Eller hur menar du?
LimeMedlem sedan sep. 2001837 inlägg
addKeyListener(KeyListerner kl) tar en KeyListener som argument.
Om du t.ex. har en JFrame jfrmMinRuta som du vill kunna lyssna på tangentbordsinmatningar ifrån så gör du jfrmMinRuta.addKeyListener(new KeyHandler());
Om du ska koppla flera komponenter till samma KeyListener så är det smart att göra en instans av det.
Normalt är Lyssnare specialicerade för just en viss komponent så om man har en komponent "MinKomponent" så brukar man låta den implementera interfacet KeyListener och så i konstruktorn till denna komponent så gör man så som du vill göra (addKeyListener(this))
EDIT: Jo, alltså... Det är lite för enkelt att låta lyssnaren lyssna på sig själv. Tänk såhär "Jag har en lyssnare, vem ska den lyssna på" och så i den klassen så säger du "hörrö klassen, här har du ett jättefint objekt som du kan prata med".
/Lime
BlommanMedlem sedan aug. 200263 inlägg
Så här har jag gjort en gång: addKeyListener(this.mitt_objekt) och mitt objekt var inte en Component, det är en egen definerad klass.
Men det kanske ser ut just så här pga att det inte en en Component?
LimeMedlem sedan sep. 2001837 inlägg
Nej, det är klart att this.mitt_objekt inte behöver vara en Component, den skall vara en instans av en klass om implementerar KeyListener-interfacet.
/Lime