HBox wird nicht im Bottom angezeigt

Blancoreb

Mitglied
Hallo,
ich habe folgendes Problem mit JavaFx:
Wenn ich die view für mein Programm erzeuge erscheint die Hbox nicht ganz unten obwohl ich
bottomMenu.setBottom() verwende. Weiß vielleicht jemand warum?
Hier mein Code:

Java:
private void initView() {
        int hoehe = welt.getHoehe();
        int breite = welt.getbreite();
        BOARD_SIZE = hoehe*breite;                          
        primaryStage.setTitle( "GameOfLife" );
        System.out.println(breite + " " + hoehe);
    
        //create Pane
        root = new Pane();
       
        //create Border pane
        BorderPane bottomMenu = new BorderPane();
       
        HBox menu = new HBox();
       
        menu = addHBox();
        bottomMenu.setBottom(menu);
     
        root.getChildren().add(menu);
       
        
        Scene theScene = new Scene(root,BOARD_SIZE,BOARD_SIZE);
        primaryStage.setScene(theScene);
       
        drawRactangles();
       
    }
   
   
   
    public HBox addHBox() {
        HBox hbox = new HBox();
     
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(100);
        hbox.setStyle("-fx-background-color: #000000;");
        Button buttonStart = new Button("Start");
        buttonStart.setPrefSize(100, 20);

        Button buttonStopp = new Button("Stopp");
        buttonStopp.setPrefSize(100, 20);
       
        hbox.getChildren().addAll(buttonStart,buttonStopp);
       

        return hbox;
    }
Vielen Dank.
 
Das liegt wohl daran, dass du deine HBox auf das root-Pane *UND* das BorderPane#bottom legst. Eigentlich wolltest du wohl das menu auf bottom vom BorderPane legen und dann das BorderPane als child zu root hinzufügen.
 
Danke für deine Antwort. Meintest du das so?
Java:
   //create Pane
        root = new Pane();
       
        //create Border pane
        BorderPane bottomMenu = new BorderPane();
       
        HBox menu = new HBox();
       
        menu = addHBox();
        bottomMenu.setBottom(menu);
     
        root.getChildren().add(bottomMenu);
 
Code:
HBox menu = new HBox();
menu = addHBox();
// abkürzen zu
HBox menu = addHBox();
// in addHBox macht du eh ein new HBox()!

//Noch kürzer:
bottomMenu.setBottom(addHBox());

// besserer Name für addHBox wäre createHBox
 
Okay danke für den Tipp. Habs jetzt geändert leider ist die Ausgabe dieselbe... 🙁

Java:
private void initView() {
        int hoehe = welt.getHoehe();
        int breite = welt.getbreite();
        BOARD_SIZE = hoehe*breite;                          
        primaryStage.setTitle( "GameOfLife" );
        System.out.println(breite + " " + hoehe);
    
        //create Pane
        root = new Pane();
       
        //BorderPane bottomMenu erstellen
        BorderPane bottomMenu = new BorderPane();
       
        //bottomMenu als Child zur root pane hinzufügen
        root.getChildren().add(bottomMenu);
       
     
        //Hbox im Botton anzeigen
        bottomMenu.setBottom(createHBox());
     
       
        //Scene erstellen
        Scene theScene = new Scene(root,BOARD_SIZE,BOARD_SIZE);
        primaryStage.setScene(theScene);
       
        drawRactangles();
       
    }

   
   
   
    public HBox createHBox() {
        HBox hbox = new HBox();
     
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(100);
        hbox.setStyle("-fx-background-color: #000000;");
        Button buttonStart = new Button("Start");
        buttonStart.setPrefSize(100, 20);

        Button buttonStopp = new Button("Stopp");
        buttonStopp.setPrefSize(100, 20);
       
        hbox.getChildren().addAll(buttonStart,buttonStopp);
       

        return hbox;
    }
 

Anhänge

  • view.JPG
    view.JPG
    41,6 KB · Aufrufe: 17
Dann wird as am root liegen.
Du möchtest ja das "Menü" immer am Boden haben. Also nutze doch als Root gleich das BorderPane (das ist in 50% der Fälle mein Favorit, gefolgt von GridPane und StackPane). Und kicke dein bisheriges root. Dein Inhalt muss dann als center auf das BorderPane gehen (welches dann natürlich nicht mehr menu im Namen haben sollte). Generell aber wird das Problem sein, dass das BorderPane einfach die Minimale Höhe und Breite hat und daher links oben im Pane angesiedelt wird, da Pane selbst IMHO nicht gross Layouten kann. Wahrscheinlich würde es genügen, Höhe und Breite auf die Scene (oder root? ich weiss es gerade nicht) zu setzen, aber ich würde die "BorderPane als root"-Variante bevorzugen.
 
Perfekt! Danke dir, so hat es funktioniert:
Java:
private void initView() {
        int hoehe = welt.getHoehe();
        int breite = welt.getbreite();
        BOARD_SIZE = hoehe*breite;                          
        primaryStage.setTitle( "GameOfLife" );
        System.out.println(breite + " " + hoehe);
    
        //create Pane
        root = new BorderPane();
       
        //BorderPane bottomMenu erstellen
      
       
        //bottomMenu als Child zur root pane hinzufügen
        root.getChildren().add(createHBox());
       
     
        //Hbox im Botton anzeigen
        root.setBottom(createHBox());
     
       
        //Scene erstellen
        Scene theScene = new Scene(root,BOARD_SIZE,BOARD_SIZE);
        primaryStage.setScene(theScene);
       
        drawRactangles();
       
    }
 
Ich nutze als Root immer den AnchorPane. Mit dem funktioniert alles tadellos 🙂
Aber warum erzeugst du deine GUI im Code? Ist doch nicht Sinn und Zweck von JavaFx oder irre ich mich da?
 
Irgendwie werde ich mit dem AnchorPane nicht warm, hab aber seinerzeit auch in SWT recht lange gebraucht, bis ich das RelativeLayout begriffen hab und wollte dann nichts anderes mehr. Der Mensch ist halt ein Gewohnheitstier 😉
 

Zurück
Oben