2014-05-10 13 views
5

Jestem nowy w javafx, więc proszę o zachowanie mnie. Więc to, co chcę zrobić, to coś naprawdę prostego, ale nie wiem, jak to naprawić.Jak wyśrodkować węzeł w okienku javafx

Cel: Utwórz okienko o wielkości 500 na 500. Chcę dodać węzeł iw naszym przypadku powiedzmy obraz zawierający obraz o wielkości 200 na 200. Chcę móc dodać widok obrazu do szyby i wyśrodkować.

ImageView view = new ImageView(); 

    Image img = new Image("test.png"); 
    view.setImage(img); 
    Pane pane = new Pane(); 
    pane.setMinWidth(500); 
    pane.setMinWidth(500); 
    pane.getChildren().add(view); 

Wszelkie porady ceniona, Dzięki, D

+0

Jakiś powód, dla którego nie możesz użyć 'StackPane',' HBox' lub 'VBox'? Mogą mieć swój zestaw wyrównania, który wyśrodkuje dzieci w obu wymiarach automatycznie, jeśli użyjesz 'Pos.CENTER'. –

+0

Cała idea polega na tym, że mam panel zakotwiczenia, a następnie chcę, aby użytkownik mógł dodać dowolny układ (VBox, HBox lub Stackpane). Jednak rozmiar panelu zakotwiczenia zmienia się i nie ma preferowanej wielkości. Jak wtedy wyśrodkować go przy użyciu dowolnego układu, którego używasz. – darewreck

+0

Wybrane opcje układu rozwiązują problem opisany powyżej. Jestem zdezorientowany. Dlaczego musisz używać 'AnchorPane'? –

Odpowiedz

13

masz 2 opcje:

1) Na przykład za pomocą StackPane zamiast Pane (ponieważ można używać Pos)

StackPane p = new StackPane(); 
p.setPrefSize(700,700); //set a default size for your stackpane 
Image img = new Image("test.png"); //create an image 
ImageView v = new ImageView(img); //create an imageView and pass the image 

p.getChildren().add(v); //add imageView to stackPane 
StackPane.setAlignment(v,Pos.CENTER_LEFT); //set it to the Center Left(by default it's on the center) 
stage.setScene(new Scene(p)); 
stage.show(); 

2) Można użyć JavaFx Scene Builder, jest to narzędzie do projektowania układu graficznego dla JavaFx. Na przykład, jeśli chcesz utworzyć Hbox układ:

<?import java.lang.*?> 
<?import java.net.*?> 
<?import java.util.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.effect.*?> 
<?import javafx.scene.image.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.shape.*?> 
<?import javafx.scene.text.*?> 

<HBox alignment="CENTER" prefHeight="369.0" prefWidth="425.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" > 
    <children> 
     <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" x="0.0" HBox.hgrow="NEVER"> 
      <image> 
       <Image url="@../yourImg.png" /> 
      </image> 
     </ImageView> 
    </children> 
</HBox> 

składowania go jako myLayout.fxml wewnątrz głównego klasy i dodaj do swojego kodu:

Hbox root = FXMLLoader.load(getClass().getResource("myLayout.fxml")); 
Scene scene = new Scene(root); 
stage.setScene(scene); 
stage.show(); 
+1

Dzięki. Co się stanie, jeśli jest to kotwica bez preferowanego rozmiaru. Próbowałem po prostu dodać stackPane do okienka Anchor. Jednak bez ustawionego ustawionego rozmiaru centrowanie nie będzie działać. W moim przykładzie można zmienić rozmiar okna zakotwiczenia, ponieważ po lewej, prawej stronie, u góry iu dołu znajdują się zakładki, które mogą się otwierać i zmieniać rozmiar centralnej tablicy zakotwiczenia. – darewreck

2

zwykle wykorzystać następujące podejście wyśrodkować węzeł/okienko:

<VBox alignment="CENTER"> 
    <HBox alignment="CENTER"> 
     <!-- your node/pane --> 
    </HBox> 
</VBox>