Avatar billede bumle90 Nybegynder
21. december 2001 - 14:18 Der er 4 kommentarer og
1 løsning

KeyboardListener

Hej, jeg har lavet et JPanel som ligger i en JFrame. Jeg vil gerne have dette JPanel til at lytte på keyboardevents. Jeg har implementeret KeyboardListener og dens metode, men der sker alligevel ikke noget når jeg trykker på keyboardet. Jeg har bare lavet det simpelt og sat Panelet til selv at være eventhandler. Jeg snublede over noget med noget focus, og bla. en metode der hedder
hasFocus(), som returnerer false når jeg udskriver den. Jeg tænkte at det nok har noget med det at gøre. Men hvordan sætter jeg keyboardfocus på mit jpanel så den lytter på keyboardevents. Tak
Avatar billede carstenknudsen Nybegynder
21. december 2001 - 16:02 #1
Du mener formodentlig KeyListener. Har du benyttet addKeyListener() metoden med dit JPanel som
listener eller er det din applikation der formentlig nedarver fra JFrame.  Hvis din implementering ligger i JFrame\'n nytter det ikke
at tilføje KeyListener\'en på JPanel\'et. Du skulle ikke have behov for at kigge på keyboardfocus, men
selvfølgelig skal du sørge for at der hvor du taster skal den have focus (klik i den med musen). Hvis ikke du har løst problemet selv så lad os se lidt kode.
Avatar billede bumle90 Nybegynder
22. december 2001 - 03:15 #2
Hmmm ok....men jeg svarer ikke for konsekvenserne :) I må se om i kan overskue koden hehe. Nej det er ikke fordi jeg har added keylisteneren det forkerte sted. Men kig selv efter og se om du kan se hvad fejlen er :

Linierne angiver at der starter en ny klasse...

--------------------------------------------------
import javax.swing.*;
import java.awt.Container;
public class samleramme extends JFrame
{
       
private Container con;   

    public samleramme()
    {
    setSize(500,500);
    con=getContentPane();
   
    slange spiller=new slange();   
    spilbraet braet=new spilbraet();
inputHandler actionhandler=new inputHandler(braet,spiller);
    con.add(braet);
    }
}

--------------------------------------------------

import java.awt.event.*;
import javax.swing.Timer;

public class inputHandler implements ActionListener,KeyListener,FocusListener
{


private boolean op=false;
private boolean ned=true;
private boolean hoejre=false;
private boolean venstre=false;
private int x=50;
private int y=50;



    public spilbraet braettet;
    public slange spiller;
    private Timer ryk_orm;

        public inputHandler(spilbraet braet,slange spilleren)
        {
        braettet=braet;
        spiller=spilleren;
        braet.addKeyListener(this);
        braet.addFocusListener(this);
        braet.requestFocus();
        braet.grabFocus();
        braet.requestDefaultFocus();
        System.out.print(braet.hasFocus());   
        ryk_orm=new Timer(50,this);
        ryk_orm.start();
        }
       
int antal=0;
    public void actionPerformed(ActionEvent e)
    {
   
        if (op==true)   
        {
        y--;
        spiller.addPunkt(x,y);
        }
        if (ned==true)   
        {
        y++;
        spiller.addPunkt(x,y);
        }
        if (hoejre==true)   
        {
        x++;
        spiller.addPunkt(x,y);
        }
        if (venstre==true)   
        {
        x--;
        spiller.addPunkt(x,y);
        }           
       
        braettet.opdater(spiller);
   
        if (antal>=50)
        {
        spiller.RemovePunkt();
        }
    antal++;
    //System.out.println(antal);
    //System.out.println(spiller.punkter.getFirst()+\" \"+spiller.punkter.getLast());
    }


   
    public void keyReleased(KeyEvent event)
    {
    System.out.print(\"hej\");
    int tast=event.getKeyCode();
   
        switch (tast)
        {
        case 37://venstre
        venstre=true;
        hoejre=false;
        op=false;
        ned=false;
            break;
        case 38://op
        venstre=false;
        hoejre=false;
        op=true;
        ned=false;       
            break;
        case 39://højre
        venstre=false;
        hoejre=true;
        op=false;
        ned=false;       
            break;
        case 40://ned
        venstre=false;
        hoejre=false;
        op=false;
        ned=true;       
            break;       
        }


    }   

    public void keyTyped(KeyEvent event){    System.out.print(\"hej\");}

    public void keyPressed(KeyEvent event){    System.out.print(\"hej\");}

    public void focusGained(FocusEvent e){    System.out.print(\"hej\");}
         
    public void focusLost(FocusEvent e){    System.out.print(\"hej\");} 

}

--------------------------------------------------

import java.awt.*;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.Enumeration;


public class slange
{

    LinkedList punkter;
int stoerrelse;

   
    public slange()
    {
    punkter=new LinkedList();
    stoerrelse=2;
    }
   

    void tegn_slange(Color clr,Graphics page)
    {
    Iterator gogo=punkter.iterator();
    page.setColor(clr);
   
        while (gogo.hasNext())
        {
        Point aktuelt_punkt=(Point)gogo.next();
        page.fillRect(aktuelt_punkt.x,aktuelt_punkt.y,6,6);
        }
    }

    void et_punkt(Graphics page)
    {
        Point nu=(Point)punkter.getLast();
        page.setColor(new Color(131,125,245));   
        page.fillRect(nu.x,nu.y,6,6);
    }

    void addPunkt(int x,int y)
    {
    punkter.addFirst(new Point(x,y));
    }

    void RemovePunkt()
    {
    punkter.removeLast();
    }
}

--------------------------------------------------

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class spilbraet extends JPanel// implements KeyListener
{

Color bgFarve;
Color slangeFarve;

    public spilbraet()
    {
    bgFarve=new Color(131,125,245);
    slangeFarve=new Color(121,12,220);
    }


    public void paintComponent(Graphics page)
    {
    page.setColor(bgFarve);
    page.fillRect(0,0,500,500);
    }
   
    void opdater(slange slange1)
    {

    slange1.tegn_slange(slangeFarve,getGraphics());
    slange1.et_punkt(getGraphics());   
}
}
--------------------------------------------------

public class main
{
public static void main(String[]args)
{
samleramme ramme=new samleramme();
ramme.show();

}
}
Avatar billede bumle90 Nybegynder
22. december 2001 - 03:17 #3
WHOOPS...jeg kom til at trykke på accpter....det var ikke meningen....vil du ikke lige kigge på det alligevel?
Avatar billede carstenknudsen Nybegynder
22. december 2001 - 14:32 #4
jo, jeg skal nok kigge på det.
Avatar billede carstenknudsen Nybegynder
22. december 2001 - 17:40 #5
Du skal tilføje din KeyListener til JFrame\'en
i stedet for til JPanel\'et.  Jeg har prøvet det
og det virker.  Der er dog andre problemer med
koden, bla. benytter du en deprecated metode.
Jeg ville i første omgang fjerne FocusListener\'en
indtil resten virker.
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