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.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
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ů
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
Ř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ý.
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ář
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í.
Ajo... díky moc za pomoc tomu proč tam musí bejt tlačítko nechapu Ale i tk diky moc řek si mi to co sem otřeboval
Zobrazeno 8 zpráv z 8.