Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Key Listener JavaFX

Java Java Key Listener JavaFX

Aktivity (1)
Avatar
iqbigbang
Člen
Avatar
iqbigbang:2.2.2016 17:02

Začínám s JavouFX a pokouším se vytvořit jednoduchou hru. Zatím jsem se dostal jen k pohybu obdélníčku po okně podle šipek. KeyListener z návodu na YouTube mi ale nefunguje a nevím jak pracovat s eventem OnKeyPressed.

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TestApp extends Application {
    private Drawer drawer;
    @Override
    public void start(Stage primaryStage) {
        //Komponenty
          Canvas canvas = new Canvas(300, 300);
          GraphicsContext gc = canvas.getGraphicsContext2D();
          this.drawer = new Drawer(gc);
          this.drawer.draw();

        //Konec komponent

        StackPane root = new StackPane();
        //Přidávání komponent:   root.getChildren().add(komponenta);
         root.getChildren().add(canvas);

        Scene scene = new Scene(root, 300, 250);
        scene.setOnKeyPressed(); //Tady nevím co zadat
        primaryStage.setTitle("Drawing on canvas");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

P.S.: Drawer je moje vlastní třída, vykreslování pomocí ní funguje dobře, potřebuju pomoct jen s tím Key Listener

Odpovědět 2.2.2016 17:02
Say me, why not?
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na iqbigbang
pocitac770:2.2.2016 17:12
Rectangle r =......
scene.setOnKeyPressed(new EventHandler<KeyEvent>(){
            @Override
            public void handle(KeyEvent e){
                if(e.getCode() == KeyCode.M){
                        r.setFill(Color.MAGENTA);
                }
            }
        });

Tady máš příklad použití. POZOR!!! Pokud se nepletu, tak java.awt.even­t.KeyEvent odkazuje na starší knihovny, ještě z doby Java Swing, nevím, jaká je mezi tímhle a JavaFX kompatibilita (to mě někdo prosím doplňte), takže to ti zde nebude fungovat. Tak jako tak potřebuješ KeyEvent z knihovny javafx.scene.input, a 2 KeyEvent Classy ti tam budou dělat asi potíže, pokud to nenaimportuješ pod jiným jménem ;)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 2.2.2016 17:12
Avatar
iqbigbang
Člen
Avatar
Odpovídá na pocitac770
iqbigbang:2.2.2016 17:42

Hlásí mi to chybu hned na tom řádku

scene.setOnKeyPressed...

Screenshot je zde: http://s9.postimg.org/…v/screen.png

Nahoru Odpovědět 2.2.2016 17:42
Say me, why not?
Avatar
iqbigbang
Člen
Avatar
Odpovídá na iqbigbang
iqbigbang:2.2.2016 17:44

Dobrý. Už jsem přišel na to proč mi nefungovalo. Měl jsem naimportováno java.awt.event místo fx eventu.

Nahoru Odpovědět 2.2.2016 17:44
Say me, why not?
Avatar
iqbigbang
Člen
Avatar
iqbigbang:2.2.2016 18:08

Díky, ale ještě mám jeden problém. Vše fungovalo dobře, dokud jsem nezačal vykreslovat obrázek. Hlásí mi to chybu na řádce, kde mám:

this.image = new Image(imagesrc);

"Invalid URL or resource not found", přitom jako cestu jsem zkoušel obrazek.png i /obrazek.png, nevíte někdo co s tím?

Nahoru Odpovědět 2.2.2016 18:08
Say me, why not?
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na iqbigbang
pocitac770:2.2.2016 18:14

Zkus (za předpokladu, že se obrázek nachází ve stejném package jako třída)

this.image = new Image(getClass().getResource("obrazek.png").toString());
Editováno 2.2.2016 18:16
 
Nahoru Odpovědět 2.2.2016 18:14
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 6 zpráv z 6.