Diskuze: Reakce na klávesy

Java Java Reakce na klávesy

Avatar
relycanx
Člen
Avatar
relycanx:

Chtěl bych se zeptat, jak by se prosím dala udělat reakce na klávesy a pokudmožno s podmínkou switch :)

 
Odpovědět 11.5.2013 22:11
Avatar
Samik11
Redaktor
Avatar
Samik11:

Na okno přidáš KeyListener a překryješ naimplementované metody. Informace o stisknuté klávese získáš přes instanci třídy KeyEvent. Kód by mohl vypadat takhle: :-)

@Override
public void keyPressed(KeyEvent e)
{
        int key = e.getKeyCode();

        switch(key)
        {
        case KeyEvent.VK_RIGHT:
                System.out.println("Vpravo"); break;
        case KeyEvent.VK_LEFT:
                System.out.println("Vlevo"); break;
        default:
                System.out.println("Neplatná volba");
        }

}
Nahoru Odpovědět 11.5.2013 22:38
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
Samik11
Redaktor
Avatar
Nahoru Odpovědět 11.5.2013 22:43
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
relycanx
Člen
Avatar
Odpovídá na Samik11
relycanx:

jinak jak koukám, tak na to je metoda a co mám dopsat do toho parametru e? znám akorát scanner na čtení znaků a souborů a ten se na to nepoužívá ne? :( myslím tim, že když ji vyvolám, jakože "keyPressed(e)" tak co bude místo toho e

Editováno 11.5.2013 23:06
 
Nahoru Odpovědět 11.5.2013 23:05
Avatar
Samik11
Redaktor
Avatar
Odpovídá na relycanx
Samik11:

Vůbec ti nerozumím :D
KeyListener je rozhraní, nutí tě naimplementovat 3 abstraktní metody, které musíš překrýt:

  • keyPressed(KeyEvent e)
  • keyReleased(Ke­yEvent e)
  • keyTyped(KeyEvent e)

Parametr v závorce je instance třídy KeyEvent. Díky ní můžeš zjišťovat inforamce o stisknuté klávese. Např:

e.getKeyChar() // vrátí znak klávesy
Nahoru Odpovědět 11.5.2013 23:20
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
relycanx
Člen
Avatar
Odpovídá na Samik11
relycanx:

já jsem chtěl lidsky jednoduchou věc. prostě jsem si to představoval tak, že jednoduše vyvolám metodu (třeba jako v C# Console.ReadKey()), kdy prostě počítač čeká na stisknutí určité klávesy a podle toho pak reaguje, ale bohužel ani nerozumím frázi "překrýt 3 abstraktní metody" :( abstraktní metody znám, ale vůbec nechápu co mám udělat. Můžeš mi prosím na příkladu ukázat, kdy se vyvoláním metody docílí naslouchání počítače, který čeká na stisknutí klávesy a následné podmínky, která se splní podle stiknutých kláves? Jako třeba scanner taky čeká, když zachytí metodu nextLine() a to je příkaz na jeden řádek :D

 
Nahoru Odpovědět 15.5.2013 19:12
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na relycanx
Hartrik:

Zdejší zdrojové kódy by ti také mohly pomoci: http://www.itnetwork.cz/…had-snake-2d ;)

 
Nahoru Odpovědět 15.5.2013 20:25
Avatar
relycanx
Člen
Avatar
Odpovídá na Hartrik
relycanx:

no... já to chtěl zatim spíš narychlo pro přítelkyni, protože jsem čekal, že to bude jednodušší, ale když vidim ty mazce jak instance volá instanci zabalenou z instance a bla bla bla, tak se na to asi vykašlu, než k tomu v budoucnu dojdu sám. Zlatý scanner, kde stačí vytvořit instanci a pak jen volat metody, kde už počítač naslouchá :( :(

Editováno 15.5.2013 20:48
 
Nahoru Odpovědět 15.5.2013 20:48
Avatar
Odpovídá na relycanx
Michal Žůrek (misaz):

Ach jo, přečíst zdrojový kód a překopírovat ho a pochopit je (alespoň pro mě) otázka 10ti minut...

Nahoru Odpovědět 15.5.2013 20:51
Nesnáším {}, proto se jim vyhýbám.
Avatar
Зайчик
Člen
Avatar
Odpovídá na relycanx
Зайчик:

to budeš mít těžkej život programátora pokud ti přijde těžké přepsat 3 metody :)

Nahoru Odpovědět 15.5.2013 20:52
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
Зайчик:

pokud vím Scanner mu problém nedělá ;) dělá mu problém tohle :

neco.addKeyListener(new KeyListener(){

 @Override
 public void keyPressed(KeyEvent e){}
 @Override
 public void keyReleased(KeyEvent e){}
 @Override
 public void keyTyped(KeyEvent e){}
}
Editováno 15.5.2013 20:56
Nahoru Odpovědět 15.5.2013 20:56
Коммунизм для нашего будущего!
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

Posluchače zaznamenávající změny na klávesnici se umísťují na komponenty, např JPanel, JTextArea...

panel.addKeyListener(new java.awt.event.KeyAdapter() {
    @Override
    public void keyPressed(java.awt.event.KeyEvent evt) {
        switch (evt.getKeyCode()) {
            case KeyEvent.VK_UP:
                break;
            case KeyEvent.VK_DOWN:
                break;
        }
    }
});
Editováno 15.5.2013 21:03
 
Nahoru Odpovědět 15.5.2013 21:01
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

Změny ale nelze sledovat globálně - např ve Windows, v jiných oknech, nebo pokud není daná komponenta označena.

 
Nahoru Odpovědět 15.5.2013 21:08
Avatar
relycanx
Člen
Avatar
relycanx:

děkuji všem za odpovědi, vím že se vztekám, ale prostě na mě přítelkyně tlačí a mě trochu štve, že tomu moc nerozumim a vyčítá mi to, no :/ ale to je jedno :)

 
Nahoru Odpovědět 15.5.2013 21:30
Avatar
Зайчик
Člen
Avatar
Odpovídá na relycanx
Зайчик:

přítelkyně na tebe tlačí kvůli keyListeneru v jave? :D :D

Nahoru Odpovědět  +1 15.5.2013 21:32
Коммунизм для нашего будущего!
Avatar
Odpovídá na Зайчик
Michal Žůrek (misaz):

Spíš kvůli nějakému prográmku, který má umět keyListener :)

Nahoru Odpovědět 16.5.2013 6:42
Nesnáším {}, proto se jim vyhýbám.
Avatar
relycanx
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
relycanx:

jj právě no. Oni ve škole makaj v JavaFX a já s tím nemám zkušenosti, tak mi jednou řekla "ty furt něco programuješ, ale když po tobě jednou něco chci, tak mi nepomůžeš", takže mě to docela i rozhodilo, protože mě programování baví a rád bych jí pomohl, ale nejde to.. zatím :/ Jinak má za úkol udělat jednoduchou obrázkovou textovku, takže se má spustit program, objeví se úvodní obrazovka s obrázkem, kde je třeba "1)Start, 2)Konec" a hra zobrazuje další obrázky a zase se na ně reaguje podle číslic, prostě jako jednoduchá textovka pro konzoli, akorát místo konzole okno. Jako napadlo mě to udělat pomocí GUI, ale ona to musí mít v tom FXku. A to jí furt říkám ať mi splaší materiály, že pracovní listy ze školy jsou doslova požehnání, když je tam teorie a zároveň logický úlohy, ale stydí se no :/ jednou si tam zajdu asi sám :D :D

Editováno 16.5.2013 14:01
 
Nahoru Odpovědět 16.5.2013 13:59
Avatar
Kit
Redaktor
Avatar
Odpovídá na relycanx
Kit:

Jde o to, že jsi zvyklý zadat čtení ze vstupu a čekat. KeyListener tohle dělá za tebe. Objektu přidáš metodou addKeyListener objekt tvé třídy, která implementuje rozhraní KeyListener. Parametr "e" (osobně ho pojmenovávám "event", protože "e" si rezervuji pro exception) si událost (instanci třídy KeyEvent) dosadí už sama při volání některé z implementovaných metod.

Nahoru Odpovědět 16.5.2013 14:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Зайчик
Člen
Avatar
Odpovídá na relycanx
Зайчик:

Jak přítelkyni máš asi pomoct když to sám neumíš? Radši jí řekni ať dává ve škole pozor. :P

Nahoru Odpovědět 16.5.2013 14:38
Коммунизм для нашего будущего!
Avatar
relycanx
Člen
Avatar
Odpovídá na Зайчик
relycanx:

já vím, ale jí nebaví procvičovat a nezvládá logické úlohy. Zároveň zastává názor, že programování je pro nejhloupější lidi, protože ti lidé co to programují, musí být na stejné úrovni jako počítač, který taky potřebuje na každou maličkost vysvětlení :D teď se snaží jen dodělat prvák tím, že udělá tuhle jednu pololetní práci (tu textovku) a pak přestoupí na jinou školu. Legrace je, že jsem přes tu JavuFX zvládnul daný obrázek vykreslit podle podmínky, jenže ono to vykreslení probíhá v několika krocích, kde si instance přihraje instanci a to hned několikrát, takže sice jdou obrázky vyvolávat v podmínce poměrně dobře, ale jakmile jsem to zkusil kutilsky přes scanner, kdy měl počítač hned po vykreslení obrázku čekat na zadání čísla, tak po spuštění programu se sice okno objevilo, bílé, jenže pak už nic, furt se mi tu točilo kolečko, že to maká, jenže ono to ve skutečnosti jen čekalo na stisknutí klávesy, což byla vyvolaná metoda potom -.- fakt škoda že se nedá kreslit do konzole, pak bych to FX někam zahodil :DDDD

 
Nahoru Odpovědět 16.5.2013 17:08
Avatar
Kit
Redaktor
Avatar
Odpovídá na relycanx
Kit:

Když je podle ní programování pro nejhloupější lidi, tak proč neprogramuje? Asi by z ní byla skvělá programátorka.

Nahoru Odpovědět  +1 16.5.2013 17:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Зайчик
Člen
Avatar
Odpovídá na Kit
Зайчик:

spíš je sranda že vlastně chodí s hlupákem :)

Nahoru Odpovědět 16.5.2013 17:30
Коммунизм для нашего будущего!
Avatar
Kit
Redaktor
Avatar
Odpovídá na Зайчик
Kit:

Na druhou stranu mu řekla, že není až takový blbec, aby jí pomohl.

Nahoru Odpovědět  +1 16.5.2013 17:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Зайчик
Člen
Avatar
Odpovídá na Kit
Зайчик:

ještě že nás hlupáku/imbecilů je stále málo a chytří lidé co jezdí s popelářem je až až tak aspoň my jakožto idioti tak moc nevyčníváme :) :D

Nahoru Odpovědět 16.5.2013 17:36
Коммунизм для нашего будущего!
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Зайчик
Jiří Gracík:

Když někomu lidi nerozumí a jejich práce se jim zdá nesmyslná nebo neužitečná, tak pak to jsou hlupáci, kreténi, a divný nebo zbytečný lidi, to se stává :D

Nahoru Odpovědět 16.5.2013 17:48
Creating websites is awesome till you see the result in another browser ...
Avatar
TomBen
Redaktor
Avatar
Odpovídá na relycanx
TomBen:

No to musí být pro ni docela ponižující, když nezvládne to, co nejhloupější
lidi bez problémů dovedou. :-) Asi bych ji v tom pěkně vymáchal. Nechal bych
ji snažit se samu a sem tam bych trefně okomentoval, co všechno má na tom
blbě. Při velkém úspěchu bych ji pochválil, že už se těm nejhloupějším
po malých krocích přibližuje. :D

Nahoru Odpovědět  +1 16.5.2013 17:49
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na TomBen
Jiří Gracík:

To je asi jako kdybys měl holku na technické škole a tvrdila, že třeba manuální práce je pro nejhloupější, řek jí ať složí skříňku, a poté, co by si vrtačkou provrtala nohu jí řek, že už se přibližuje těm nejhloupějším lidem :D Asi bys dostal po držce a byl svobodnej :D

Nahoru Odpovědět 16.5.2013 17:52
Creating websites is awesome till you see the result in another browser ...
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Jiří Gracík
TomBen:

Prozradím ti tajemství..
Jsem dlouho a spokojeně ženatý. :D

Nahoru Odpovědět 16.5.2013 18:02
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Jiří Gracík
Redaktor
Avatar
Nahoru Odpovědět 16.5.2013 18:10
Creating websites is awesome till you see the result in another browser ...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 31 zpráv z 31.