Kezdőoldal » Számítástechnika » Programozás » Mi a probléma itt, a keylisten...

Hecvid kérdése:

Mi a probléma itt, a keylistener-emmel? (JAVA)

Figyelt kérdés

Elkezdtem írni egy programot.

Még csak annyit szeretnék tőle, hogy legyen egy kép, ami a nyilak lenyomásakor "arréb" megy/ugrik, de mintha nem érzékelné a gombokat, egyáltalán.

A program elindul, és nincs hiba üzenet.

Mi ebben a kódban a probléma:



Menu.java:


class Menu {

public static void main(String[] args) {

start go = new start();

go.main();

}

}


class start {


void main() {

mozgas rajta = new mozgas();

rajta.menet();

}


}


(Menu.java vége)



Mozgas.java:


import java.applet.Applet;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;


class mozgas

extends Applet

implements KeyListener{


JFrame keret;

palya field;

int irany;

int x=33;

int y=33;



void menet() {


keret = new JFrame("Snake");

field = new palya();


addKeyListener(this);

setFocusable(true);

setFocusTraversalKeysEnabled(false);


keret.getContentPane().add(BorderLayout.CENTER, field);

keret.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

keret.setSize(1200,678);

keret.setVisible(true);

}



@Override

public void keyPressed(KeyEvent e){

irany = e.getKeyCode();

if (e.getKeyCode() == KeyEvent.VK_RIGHT) {x = x+32;}


switch (irany) {

case KeyEvent.VK_LEFT: //balra

y = y-32;

break;


case KeyEvent.VK_UP: //fel

x = x-32;

break;


case KeyEvent.VK_RIGHT: //jobbra

y = y+32;

break;


case KeyEvent.VK_DOWN: //le

x = x+32;

break;


default: x = x+32;

}

x=x+32;

field.repaint();

}



@Override

public void keyTyped(KeyEvent e){


}



@Override

public void keyReleased(KeyEvent e){


}



class palya extends JPanel {


@Override

public void paintComponent (Graphics g) {

super.paintComponent(g);


Color c = new Color(130,130,130);

g.setColor(c);

g.fillRect(8,8,624,624);


c = new Color(238,238,238);

g.setColor(Color.WHITE);

g.fillRect(30,30,578,578);


Image kep = new ImageIcon("kocka.png").getImage();

g.drawImage(kep,x,y,this);

}

}



}


(Mozgas.java vége)



Tudom, hogy vannak benne fölös részek, de egy részük azért, mert későbbre kell, egy része, meg azért, mert próbáltam életre hívni, bármilyen fajta mozgást (e miatt vannak értelmetlennek tűnő sorok, de ezektől, max furán kéne mozognia).

A rajzolással elvileg semmi gond, mert amikor csak egy ciklussal változtatta az x/y értéket, akkor mozgott rendesen.


A kérdés, hogy miért nem érzékeli a gombnyomást, vagy miért nem mozog egyáltalán?


Előre is köszönöm.



2015. márc. 1. 13:15
1 2
 1/11 anonim ***** válasza:

> miért nem érzékeli a gombnyomást, vagy miért nem mozog egyáltalán?


Elsőként derítsd ki, a kettő közül mi nem működik.


1. Tegyél egy kiíratást a gombnyomást elkapó metódusodba.

2. Tegyél egy kiíratást a paint metódusodba.


Így látni fogod mi fut le, mi nem.


Ami nekem amúgy szemet szúr, gyanús: a "palya" nevű osztályban használsz x és y változót, de azok hol kapnak értéket???


További javaslat: próbáld meg követni a Java névkonvencióit (pl. osztálynevek mindig nagybetűvel kezdődnek), magadnak is segítesz átlátni a programot.

2015. márc. 1. 13:35
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:

> x és y változót, de azok hol kapnak értéket?


Jó, látom már, egy fájlban vannak, de nekem akkor is gyanús. Próbáld meg adattagként definiálni a "palya"-ban is és setterekkel add oda neki az új értéket mindig, hátha.

2015. márc. 1. 13:36
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:

A Paint metódusnak működnie kell, mert amikor ciklussal változtattam x/y értéket, akkor szépen ment arrébb a kép.


A gomb lenyomásánál kell a problémának lennie, mert bármit írok oda, nem történik semmi.


Az x, és y, még deklarálásnál kap kezdő értéket (33), és a keypressed változtatná a nyilak megnyomásakor, ha működne.

2015. márc. 1. 13:42
 4/11 Tengor ***** válasza:

1.) [link] talán...

2.) Legközelebb valami olyan helyre tedd fel a forráskódot, ahol van kiemelés, vagy legalább indentálás!

3.) A Java osztályokat nagy kezdőbetűvel íjuk.

2015. márc. 1. 14:00
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:

A x/y, most a palya-ban definiáltam, és setterekkel változattam, de ugyan úgy nem érzékeli a gomb nyomást :/

(a setterek működnek, kipróbáltam)


Az "addKeyListener"-t jól adtam hozzá?

Mert az az egyetlen része, amit nem tudom, hogy pontosan hogyan működik.


A nagy kezdőbetűkben igazatok van, bocsánat.

Átírtam minden osztályt nagybetűre, és mindent, ami hivatkozik rá.

2015. márc. 1. 14:14
 6/11 A kérdező kommentje:

Tengor:

Köszi, de szerintem nem ezzel a rajzolás és újra rajzolás résszel van a baj, mert az külön, működött.

2015. márc. 1. 14:16
 7/11 Tengor ***** válasza:
Ha estig nincs megoldás, és felteszed egy tárhelyre, ahonnan le lehet tölteni, akkor szívesen kipróbálom és javítom (vagy legalábbis megpróbálom)
2015. márc. 1. 15:12
Hasznos számodra ez a válasz?
 8/11 Tengor ***** válasza:

Már majdnem feladtam, de megvan! :D

addKeyListener(this); < ez az utasításod a Mozgas objektumodra vonatkozik (ekvivalens a this.addKeyListener(this); ), azért adhatod ki így az utasítást, mert egy Appletből származtatod és az Appletnek van ilyen függvénye.

Viszont a menet() függvény végén a keret nevá JFrame-et jeleníted meg és nem a Mozgas Aplletet.


A keretnek add a fókuszt és arra tedd rá a billentyűzet figyelőt és jó lesz!

2015. márc. 1. 20:49
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:

Ezt pontosan hogyan tegyem?


Én csináltam egy: Public Menet() függvényt, ebbe tettem, ehhez társítottam a fókuszt, figyelőt, mindent, és azt adtam hozzá a kerethez, de nem működött.


A JFrame-hez közvetlen, nem engedte adni.

(mert nem statikus vagy valami ilyesmi hiba üzenet van.

2015. márc. 2. 13:05
 10/11 Tengor ***** válasza:
keret.addKeyListener(this); v. valami ilyesmi. Lehet, hogy már módosítottad azóta a kódot, a tegnapi verzióba ezt beleírva működött.
2015. márc. 2. 13:46
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!