Vertikal und horizontal zentrierter Pane in ScrollPane

Kenan89

Bekanntes Mitglied
Hallo Leute,

sehe erst jetzt diese Rubrik, deswegen poste ich auch hier meine Frage:

Es geht darum in einem ScrollPane ein Pane einzufügen(GridPane, HBox, BorderPane, oder sonst was).
Dieser Pane soll sich aber nicht im ScrollPane oben links befinden, sondern zentriert werden.

Hier ein Beispielcode, der das Problem demonstriert:

Java:
public class App extends Application{
     
    public static void main(String[] args){
        Application.launch(args);
    }
         
    public void start(Stage rootStage){
        GridPane rootPane = new GridPane();
        Scene scene = new Scene(rootPane, 500, 500);
        rootStage.setScene(scene);
        rootStage.show();
         
        RowConstraints row = new RowConstraints();
        ColumnConstraints col = new ColumnConstraints();
         
        row.setPercentHeight(100);
        col.setPercentWidth(100);
         
        rootPane.getColumnConstraints().add(col);
        rootPane.getRowConstraints().add(row);
         
        ScrollPane scroll = new ScrollPane();
        StackPane centeredPane = new StackPane();
        centeredPane.setStyle("-fx-border-color: red");
        centeredPane.setPrefSize(200, 200);
        centeredPane.getChildren().add(new Button("TEST"));
         
        scroll.setHbarPolicy(ScrollBarPolicy.ALWAYS);
        scroll.setVbarPolicy(ScrollBarPolicy.ALWAYS);
        scroll.setContent(centeredPane);
         
        rootPane.add(scroll, 0, 0);
    }
 
}

Es schaut dann so aus:

Der rot umrandete pane soll horizontal und veritikal mittig zentriert sein im ScrollPane.

Danke im voraus für Hilfen.
 
Hi,

ich fürchte das wird so ohne weiteres nicht funktionieren. Man könnte die Größe des StackPanes auf die Größe der Stage setzen (abzüglich der Ränder...), dann wäre der Button bzw der Inhalt des Panes mittig.

Die Frage aller Fragen ist aber eher, worauf Du hinaus willst. Mir erschließt sich der Sinn der angefragten Konstellation nicht. Ein ScrollPane mach eigentlich nur Sinn wenn es mit "viel" Inhalt gefüllt wird, oder? Vielleicht erklärst Du mal kurz, was Dir genau vorschwebt.
 
Das ganze soll die GUI für ein Programm werden, womit man seine eigenen Spiele quasi kreieren kann(2D Spiele). Das Pane, was mittig platziert werden soll, ist die Spielkarte, die man mit Tilesets befüllen kann.
Deswegen wäre es cool, wenn es mittig sein würde. Mit Swing funktionierte es schnell. In FX bin ich noch relativ neu.
 
Wie wäre es denn ein BorderPane zu nehmen und die Karte im Center zu plazieren?

Ich bin auch noch relativ neu mit JavaFX unterwegs, aber vom Prinzip sollte alles machbar sein, was mit Swing auch möglich ist.
 
Sollte eigentlich mit setFitToHeight und setFitToWidth funktionieren.
ScrollPane (JavaFX 2.2))

Habe hier mal eine FXML angehängt die eine (Map-)Editor Struktur darstellen könnte. Links eine Toolbar für Funktionen. Oben eine typische Menüleiste und in der Mitte die Map mit 1024x1024 Pixel (als Pane) in einem Scrollpane.

Ergebnis sieht dann etwa so aus:


Die FXML:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <BorderPane prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
      <center>
        <ScrollPane fitToHeight="true" fitToWidth="true">
          <content>
            <Pane minHeight="1024.0" minWidth="1024.0" style="-fx-border-color: red" />
          </content>
        </ScrollPane>
      </center>
      <left>
        <ToolBar orientation="VERTICAL">
          <items>
            <Button mnemonicParsing="false" text="Button" />
          </items>
        </ToolBar>
      </left>
      <top>
        <MenuBar>
          <menus>
            <Menu mnemonicParsing="false" text="File">
              <items>
                <MenuItem mnemonicParsing="false" text="Close" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Edit">
              <items>
                <MenuItem mnemonicParsing="false" text="Delete" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Help">
              <items>
                <MenuItem mnemonicParsing="false" text="About" />
              </items>
            </Menu>
          </menus>
        </MenuBar>
      </top>
    </BorderPane>
  </children>
</AnchorPane>
 

Neue Themen


Zurück
Oben