IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Akce při zmáčknutí klávesy enter v javaFx

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

Aktivity
Avatar
vlastajuracka:3.11.2015 19:01

Možná už to tu bylo probíráno tkže pardon chci se zeptat jak dat klavese enter nebo i klidně jiné co má udělat při zmáčknutí :) díky moc

 
Odpovědět
3.11.2015 19:01
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na vlastajuracka
pocitac770:4.11.2015 15:01

Pokud to děláš s pomocí FXML, tak to zařídíš podobně, jako u metod na např. stisknutí tlačítka, příklad:

package klavesa;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;

/**
 *
 * @author Krupi
 */
public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void zmacknuti(KeyEvent event) {
        if (event.getCode() == KeyCode.W){
            label.setText("Zmáčkl jsi W!");
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}

A metodu přiřadíš k nějaké Nodě (např. hlavnímu Panu), viz obrázek. https://ctrlv.cz/9W9r

Obdobně bez použití FXML by část kódu vypadala nějak takto:

pane.setOnKeyPressed(new EventHandler<KeyEvent>(){
    @Override
    public void handle(KeyEvent k){
        if(k.getCode() == KeyCode.W)
            label.setText("Zmáčknul jsi W!");
    }
});

(Berme v úvahu, že pane je náš již zmíněný Anchor pane).

Zvláštní, že oba způsoby fungují pouze, pokud je tam řekněme nějaké tlačítko, na kterém je nastavena klávesnice, v tu chvíli pozor, ENTER zároveň spustí i to tlačítko (proto jsem ho v příkladu nepoužil). Ovšem za vyzkoušení nic nedáš, třeba to u tebe půjde bez problémů :)

 
Nahoru Odpovědět
4.11.2015 15:01
Avatar
vlastajuracka:4.11.2015 16:00

Tak jo hele mam 2 problémy když to udělam přesně podle tebe tk mi to vypíš 2 chyby...
https://ctrlv.cz/iglq - první je ta že metoda musím být public nebo s @FXML ale to fxml tam je a i když ji dam public furt to háže tkže nechápu...
https://ctrlv.cz/fNEX - druhá že mi to píše že tudle metodu nemůže najít nemá to být getSource() ?
Dík moc

 
Nahoru Odpovědět
4.11.2015 16:00
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na vlastajuracka
pocitac770:4.11.2015 16:23

Řešení: použil jsi při importu KeyEvent z knihovny "java.awt.event", my potřebujeme "javafx.scene­.input", u problému 1, XML nejspíš vidí chybnou metodu a proto odkaz na ní označuje za neplatný.

 
Nahoru Odpovědět
4.11.2015 16:23
Avatar
vlastajuracka:4.11.2015 16:33

Jo dobry tk todle sem spravil program normalne spustim ale když zmáčknu w nic se nestane....

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;


    @FXML
    private void zmacknuti(KeyEvent event) {
        if (event.getCode() == KeyCode.W){
            label.setText("Zmáčkl jsi W!");
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}

FXML

<AnchorPane id="AnchorPane" onKeyPressed="#zmacknuti" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zkoušeniblbosti.FXMLDocumentController">
    <children>
        <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" prefHeight="34.0" prefWidth="110.0" />
    </children>
</AnchorPane>

https://ctrlv.cz/Syf9 - Tady je návrhář

Editováno 4.11.2015 16:35
 
Nahoru Odpovědět
4.11.2015 16:33
Avatar
Odpovídá na pocitac770
vlastajuracka:4.11.2015 16:39

Žádnou chybu to nehází

 
Nahoru Odpovědět
4.11.2015 16:39
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:4.11.2015 16:51

to je právě onen problém, který jsem zmiňoval již v původní odpovědi, z nějakého důvodu to vyžaduje, aby tam bylo jakékoliv tlačítko, klidně ho můžeš přikrýt třeba rectanglem s barvou pozadí, aby nebylo vidět a bude to stále fungovat. sám nevím, proč to tak je, třeba ti na toto někdo zkušenější odpoví.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
4.11.2015 16:51
Avatar
vlastajuracka:4.11.2015 17:08

Ajo... díky moc za pomoc tomu proč tam musí bejt tlačítko nechapu :D Ale i tk diky moc řek si mi to co sem otřeboval :)

 
Nahoru Odpovědět
4.11.2015 17:08
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 8 zpráv z 8.