Servus. Ich bin ein JavaFX Neuling. Ich schreibe ein Programm mit zwei Scenes. In der ersten befindet sich eine ChoiceBox, aus der man 5 Möglichkeiten wählen kann. Diese sind "Very Easy", "Easy", "Medium", "Hard", "Very Hard". Der Wahl entsprechen soll in der zweiten Scene ein Rechteck erstellt werden, welches verschieden Breit ist. 400 bei "Very Easy" und dementsprechend runter . Das Problem ist, dass er die ganze zeit eine NullPointerException wirft da. Und selbst wenn ich was vorher deklariere wirft er keine Exception mehr sondern das Programm wird nur mit der fest deklarierten Möglichkeit gestartet. Ich hoffe ihr könnt mir zeigen was ich falsch gemacht habe. Danke im Voraus
Hier der Code
Hier der Code
Java:
public class Main extends Application {
public static int h=600;
public static int w=600;
public static int pHeight=10;
public static int pWidth;
public static Pane root;
//Hier wird der String Deklariert. Wenn difficulty "" ist dann führt das Programm aus aber die choice box bringt nichts
//Falls diffculty keinen Wert bekommt dann bekomme ich eine Nullpointerexception
//Falls ich manuell eine der möglichkeiten z.B. "Easy" eingebe dann sieht man auf der zweiten seite das recheck aber nur mit Easy größe
public static String difficulty;
@Override
public void start(Stage primaryStage) throws Exception{
root = new Pane();
root.setStyle("-fx-background-color: black;");
Scene game = new Scene(root,w,h+40);
Pane pane= new Pane();
Scene startPage = new Scene(pane,300,200);
Button startButton=new Button("start");
startButton.setLayoutX(240);
startButton.setLayoutY(160);
Text diff = new Text(10,60,"Difficulty");
Text test=new Text(10,150,difficulty);
String [] steps= {"Very Easy","Easy","Medium","Hard","Very Hard"};
ChoiceBox<String> difficultyChoiceBox=new ChoiceBox<>(FXCollections.observableArrayList(steps));
difficultyChoiceBox.setLayoutX(120);
difficultyChoiceBox.setLayoutY(45);
difficultyChoiceBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue ov, Number number, Number new_value) {
if (new_value==null){
System.out.println("null");
}else {
test.setText(steps[new_value.intValue()]);
//Hier wird dann der String diffciulty eine der Möglickeiten gegeben.
difficulty=steps[new_value.intValue()];
//Die value der difficulty scheint immer richtig zu sein
System.out.println(difficulty);
System.out.println(difficultyChoiceBox.getValue());
}
}
});
//Hier soll die ChoiceBox das dann setzen als standart
difficultyChoiceBox.setValue(difficulty);
startButton.setOnAction(event -> {
primaryStage.setScene(game);
});
pane.getChildren().addAll(startButton,diff,difficultyChoiceBox);
//Somehow it doesnt choose one of the sizes for the rectangle and gives me a nullpointer
if (difficulty.equals("Very Easy"))
pWidth=400;
if (difficulty.equals("Easy"))
pWidth=300;
if (difficulty.equals("Medium"))
pWidth=200;
if (difficulty.equals("Hard"))
pWidth=100;
if (difficulty.equals("Very Hard"))
pWidth=50;
Rectangle paddle = new Rectangle(pWidth,pHeight);
paddle.setFill(Color.WHITE);
paddle.relocate(w/4,h-pHeight);
root.getChildren().addAll(paddle);
primaryStage.setScene(startPage);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}