Hallo liebe Leute,
Ich habe folgendes Problem. Ich beschäftige mich seit Neuestem mit der Programmierung in JavaFX und bin auch recht zufrieden damit.
Nun wollte ich mir einen kleinen Dummi erstellen um mit den KeyEvents rumzuspielen und zeichne hierfür ein Rechteck auf einen Canvas, was sich mit den Arrow-Keys nach recht, oder links bewegt.
Soweit kein Problem, jedoch nach jedem Klick macht das Rechteck erst einen Satz und erst dann wird es "fließend" gezeichnet.
Hoffe, ich konnte das verständlich erklären. ^^
Hier der Code:
Die Main:
und die Scene:
Kann mir das irgendwie nicht erklären. Ist mir unter Swing irgendwie nie aufgefallen...
Gibt es dafür eine Lösung?
Ich habe folgendes Problem. Ich beschäftige mich seit Neuestem mit der Programmierung in JavaFX und bin auch recht zufrieden damit.
Nun wollte ich mir einen kleinen Dummi erstellen um mit den KeyEvents rumzuspielen und zeichne hierfür ein Rechteck auf einen Canvas, was sich mit den Arrow-Keys nach recht, oder links bewegt.
Soweit kein Problem, jedoch nach jedem Klick macht das Rechteck erst einen Satz und erst dann wird es "fließend" gezeichnet.
Hoffe, ich konnte das verständlich erklären. ^^
Hier der Code:
Die Main:
Java:
package springenderblock;
import javafx.application.Application;
import javafx.stage.Stage;
public class SpringenderBlock extends Application
{
@Override
public void start(Stage primaryStage)
{
primaryStage.setTitle("Springender Block");
Leinwand leinwand = new Leinwand();
primaryStage.setScene(leinwand);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
und die Scene:
Java:
package springenderblock;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
public class Leinwand extends Scene
{
Canvas canvas;
StackPane stackPane;
int posx = 100;
GraphicsContext gc;
public Leinwand()
{
super(new StackPane(),1024,800);
stackPane = new StackPane();
makeAll();
stackPane.getChildren().add(canvas);
this.setRoot(stackPane);
events();
}
public void makeAll()
{
canvas = new Canvas(1024,800);
gc = canvas.getGraphicsContext2D();
gc.save();
gc.setFill(Color.BLUE);
gc.fillRect(posx, 600, 150, 150);
gc.restore();
}
private void events()
{
setOnKeyPressed(new EventHandler <KeyEvent>()
{
@Override
public void handle(KeyEvent e)
{
if(e.getCode() == KeyCode.LEFT)
{
gc.clearRect(0, 0, 1024, 800);
posx = posx -20;
gc.setFill(Color.BLUE);
gc.fillRect(posx, 600, 150, 150);
System.out.println("Check Left");
}
else if(e.getCode() == KeyCode.RIGHT)
{
gc.clearRect(0, 0, 1024, 800);
posx = posx +20;
gc.setFill(Color.BLUE);
gc.fillRect(posx, 600, 150, 150);
System.out.println("Check Right");
}
}
});
}
}
Kann mir das irgendwie nicht erklären. Ist mir unter Swing irgendwie nie aufgefallen...
Gibt es dafür eine Lösung?