NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Java zachytávání klávesnice - mezerník

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Nallim
Člen
Avatar
Nallim:29.8.2015 11:23

Ahoj,
snažím se rozchodit zachytávání klávesnice v okně.

Používám Netbeans. V events si vyberu event formKeyPressed. Očekával bych, že když do této metody si dám nějaký výpis, tak dojde k vypsání při jakékoli zmáčknuté klávesy.

Ale bohužel se nic neděje. Když si dám stejný event na myš, tak to funguje. :-S

Potřebuji udělat, aby mi aplikace reagovala na mezeru -> stiskněte mezerník pro spuštění.

Jediný co se mi podařilo je:

jButtonStart.setMnemonic(KeyEvent.VK_ENTER);

Což je levý Alt + Enter. Mezerník se mi nedaří nalézt. I ten levý Alt je nešťastné řešení.

Jde to vůbec, umí to Java? Na mezerník standardně v Javě reaguje první prvek v okně.

Díky za reakce.

 
Odpovědět
29.8.2015 11:23
Avatar
Contrix
Tvůrce
Avatar
Contrix:29.8.2015 11:36

Stačí přidat EventHandler a nastavit na co má reagovat. Názvy caseů odpovídají názvu tlačítek.

scene.addEventHandler(KeyEvent.KEY_PRESSED, (KeyEvent e) -> {
            switch(e.getCode()){
                case SPACE:
                    doSomething();
                    break;
                case S:
                    doSomething();
                    break;
                case UP:
                    doSomething();
                    break;
                case F8:
                    doSomething();
                default:
                    break;
            }
        });
Nahoru Odpovědět
29.8.2015 11:36
Jsou zloději, které zákon netrestá, třebaže kradou člověku to nejcennější čas.
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na Nallim
Atrament:29.8.2015 12:14

Standardní chování komponent které mají focus je, že reagují na mezerník spuštěním ActionPerformed.

Z tvého popisu nechápu úplně přesně co má reagovat na ten mezerník. Chceš mít okno které bude reagovat na stisk mezerníku ať už je focus na jakémkoliv tlačítku? Nebo chceš mít naopak focus na určitém tlačítku tak, abys ho mohl aktivovat mezerníkem?

 
Nahoru Odpovědět
29.8.2015 12:14
Avatar
Nallim
Člen
Avatar
Odpovídá na Atrament
Nallim:29.8.2015 13:22

V okně mám tlačítko "Start", tak chci aby se mezerníkem stisklo toto tlačítko.

Editováno 29.8.2015 13:23
 
Nahoru Odpovědět
29.8.2015 13:22
Avatar
Nallim
Člen
Avatar
Odpovídá na Atrament
Nallim:29.8.2015 13:22

Smazat. Omylem se odeslalo 2x

Editováno 29.8.2015 13:22
 
Nahoru Odpovědět
29.8.2015 13:22
Avatar
Nallim
Člen
Avatar
Odpovídá na Contrix
Nallim:29.8.2015 13:45

Nějak nechápu co je "scene" a šipka "->" za parametrem metody.

 
Nahoru Odpovědět
29.8.2015 13:45
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na Nallim
Atrament:29.8.2015 15:04

Ad scene - kolega asi předpokládal, že to děláš v JavaFX. 'Šipka' je novinka Javy 8 využívá se v lambda výrazech, více na https://docs.oracle.com/…essions.html

Potom ti stačí si u toho tlačítka vyžádat focus a máš hotovo, ne?

tlacictkoStart.requestFocus()
 
Nahoru Odpovědět
29.8.2015 15:04
Avatar
Nallim
Člen
Avatar
Odpovídá na Atrament
Nallim:29.8.2015 16:38

Nějak nechápu. Kam tuto metodu umístím a jak zvolím mezerník?

Nemohl bys prosím tě kus kódu?

 
Nahoru Odpovědět
29.8.2015 16:38
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na Nallim
Atrament:29.8.2015 20:14

O ten focus požádej tehdy když chceš aby to tlačitko ten focus mělo :) Já neznám detaily té tvé aplikace, tak těžko radit konkrétně kam to dát. Mimochodem, právě jsem se dočetl, že je lepší používat na tohle metodu requestFocusIn­Window(), protože requestFocus() je údajně závislý na platformě a někde by nemusel fungovat.

Ale přepokládejme modelovou akci, že si v netbeans uděláš nový projekt, dáš vytvořit nový JFrame Form a pak si na ten JForm v designeru nasázíš pár tlačítek a labelů atd. Standardní chování je, že když to pustíš tak focus je na prvním vloženém tlačítku. Ale řekněme že chceš, aby ten focus byl po spuštění na třetím tlačítku, které se jmenuje jButton3. Tak prostě v konstruktoru toho formu přímo za initComponents() dáš

jButton3.requestFocusInWindow();

a máš focus po otevření toho formu na třetím tlačítku.

Mezerník nemusíš nijak vybírat, jak jsem psal výše, je standardní chování, že pokud je focus na tlačítku tak ho mezerníkem aktivuješ.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
29.8.2015 20:14
Avatar
Nallim
Člen
Avatar
Odpovídá na Atrament
Nallim:29.8.2015 20:48

Už to chápu, děkuji za vysvětlení.

Zpočátku jsem nedokázal pochopit princip focusu :-) tak jsem ani předtím po napsání do kódu (jak jsi i teď napsal) nenapadlo po spuštění ten mezerník zkusit zmáčknout.

 
Nahoru Odpovědět
29.8.2015 20:48
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 10 zpráv z 10.