Avatar
iqbigbang
Člen
Avatar
iqbigbang:

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. února 17:02
Say me, why not?
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na iqbigbang
pocitac770:
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. února 17:12
Avatar
iqbigbang
Člen
Avatar
Odpovídá na pocitac770
iqbigbang:

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. února 17:42
Say me, why not?
Avatar
iqbigbang
Člen
Avatar
Odpovídá na iqbigbang
iqbigbang:

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. února 17:44
Say me, why not?
Avatar
iqbigbang
Člen
Avatar
iqbigbang:

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. února 18:08
Say me, why not?
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na iqbigbang
pocitac770:

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. února 18:16
 
Nahoru Odpovědět 2. února 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.