2013-07-18 3 views
2

Я пытаюсь сделать приложение для простого просмотра изображений в JavaFX-2, FXML и Scene Builder. Это мое первое приложение JavaFX, и у меня возникли проблемы с использованием окон и макетов .Центр unresizable панели в JavaFX-2

В принципе, я хочу, чтобы отобразить изображение в оригинальном размере (, не имея возможности, чтобы увеличить/изменить размер), в абсолютном центре моего приложения. Кроме того, окно должно быть resizable, так что , если изображение больше, чем размер окна, я хочу, чтобы scrollbars, возможно, сможете увидеть все изображение..

Хорошим примером того, что я пытаюсь создать, будет Adobe Photoshop layout: http://imgur.com/iLS0lum.

Это мой текущий макет: http://imgur.com/R7PJRVk. Изображение представлено черной панелью стека. Полосы прокрутки в настоящее время работают, но я просто не могу найти способ разместить панель стека в центре.

Я чувствую, что у меня что-то не хватает, не могли бы вы указать мне в правильном направлении?

Спасибо!

редактировать: вот мой FXML код: pastebin.com/CnxYEKF1

ответ

2

вы использовали AnchorPane в качестве контейнера для вашего ScrollPane. Если вы используете StackPane, это делает центр содержимого по умолчанию. Однако StackPane, как и любая другая панель, использует столько места, сколько может получить, поэтому он всегда будет занимать все пространство и, следовательно, не центрироваться вообще. Чтобы решить эту проблему, установите ScrollPane внутри группы. Группа всегда такая же большая, как и ее дети, и вы можете контролировать ее ширину и высоту, устанавливая prefHeight и prefWidth Scrollpane. Heres ваш FXML с ним (я удалил пуговицы OnClick слушателей для простоты моего примера):

<?xml version="1.0" encoding="UTF-8"?> 

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

<?import javafx.scene.Group?> 
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="700.0" xmlns:fx="http://javafx.com/fxml" fx:controller="test.StackOverflowController"> 
    <children> 
    <VBox prefHeight="687.0" prefWidth="710.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <children> 
     <ToolBar prefWidth="600.0" style="-fx-base: firebrick"> 
      <items> 
      <Button fx:id="btn_ImgFromFile" mnemonicParsing="false" style="-fx-base: firebrick" text="Load Image From File" /> 
      <Button fx:id="btn_ImgFromWindow" mnemonicParsing="false" style="-fx-base: firebrick" text="Load Image From Window" /> 
      <Separator orientation="VERTICAL" prefHeight="21.0" /> 
      <Button fx:id="btn_LoadInfo" mnemonicParsing="false" style="-fx-base: firebrick" text="Load Window Info" /> 
      <Button fx:id="btn_SaveInfo" mnemonicParsing="false" style="-fx-base: firebrick" text="Save Window Info" /> 
      </items> 
     </ToolBar> 
     <StackPane fx:id="pane_main" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS"> 
      <children> 
      <Group> 
      <ScrollPane fx:id="scroll_pane" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="-1.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="1.0"> 
       <content> 
       <StackPane fx:id="stack_pane" prefHeight="230.0" prefWidth="333.0" style="-fx-background-color: #000000;" /> 
       </content> 
      </ScrollPane> 
      </Group> 
      </children> 
     </StackPane> 
     </children> 
    </VBox> 
    </children> 
</AnchorPane> 

Результат:

enter image description here

+0

Большое спасибо, именно то, что я хотел! Отличное объяснение тоже! – sifrenette

Смежные вопросы