Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Java Build a JavaFX Application Graphical User Interfaces Adding Interactivity

Jaden Kuhn
Jaden Kuhn
928 Points

Javafx and scenebuilder HELP

I've been trying this very simple game for 2 days now. Ive ran into how to make a keyevent problem, got that fixed. Now i want it so when a certain key is pressed it moves an image element on the screen. I cannot figure it out and im getter very frustrated.

Here is my fxml <?import javafx.scene.control.Button?> <?import javafx.scene.effect.DropShadow?> <?import javafx.scene.effect.Glow?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.shape.Rectangle?>

  <AnchorPane  maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
prefHeight="800.0" prefWidth="800.0" fx:controller="sample.Controller" xmlns="http://javafx.com/javafx/8.0.121" 
    xmlns:fx="http://javafx.com/fxml/1">

<children> <ImageView fitHeight="800.0" fitWidth="800.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="/images/background.png" /> </image> </ImageView> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#222222" height="40.0" layoutY="380.0" stroke="BLACK" strokeType="INSIDE" width="800.0"> <effect> <Glow level="1.0"> <input> <DropShadow /> </input> </Glow> </effect> </Rectangle> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#222222" height="800.0" stroke="BLACK" strokeType="INSIDE" width="20.0" /> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#222222" height="800.0" layoutX="786.0" stroke="BLACK" strokeType="INSIDE" width="20.0" /> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#222222" height="20.0" layoutX="20.0" stroke="BLACK" strokeType="INSIDE" width="767.0" /> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#222222" height="20.0" layoutX="20.0" layoutY="780.0" stroke="BLACK" strokeType="INSIDE" width="767.0" />

 <ImageView fitHeight="150.0" fitWidth="200.0" layoutX="320.0" layoutY="20.0" pickOnBounds="true" 
preserveRatio="true" fx:id="whiteShipID">
    <image>
        <Image url="/style/whiteShip2.png" />
    </image>
     </ImageView>
    <ImageView fitHeight="150.0" fitWidth="200.0" layoutX="320.0" layoutY="630.0" pickOnBounds="true" 
preserveRatio="true" fx:id="blackShipID">
    <image>
        <Image url="/style/blackShip2.png" />
    </image>
  </ImageView>

 </children>

</AnchorPane> Here is my Controller start event

package sample;

import javafx.animation.AnimationTimer; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Group; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.stage.Stage;

import java.util.ArrayList;

public class Controller{
    Main mainOb = new Main();
    boolean right = false;
    double whiteX = 320;
    double blackX = 320;

@FXML public ImageView whiteShipID;

public void playGame(ActionEvent event) throws Exception{ Parent d = FXMLLoader.load(getClass().getResource("../style/play.fxml"));

Stage playStage = new Stage();

Scene scene = new Scene(d);
scene.getStylesheets().add("/style/stylesheet.css");
playStage.setTitle("Titan Clash");
playStage.setScene(scene);
playStage.show();

if(whiteShipID == null) {
    System.out.println("Null");
}





ArrayList<String> input = new ArrayList<String>();

scene.setOnKeyPressed(
        new EventHandler<KeyEvent>() {
            public void handle(KeyEvent e) {
                String code = e.getCode().toString();

                // only add once... prevent duplicates
                if (!input.contains(code))
                    input.add(code);
                System.out.println(input);
                if(input.contains("RIGHT")) {
                    right = true;

                }
            }
        });


scene.setOnKeyReleased(
        new EventHandler<KeyEvent>() {
            public void handle(KeyEvent e) {
                String code = e.getCode().toString();
                input.remove(code);
                right = false;
            }
        });
AnimationTimer animate = new AnimationTimer() {

    public void handle(long arg0) {
        if(right) {
            whiteX+=3;
            System.out.println(whiteX);
        }
    }
};
animate.start();

}