JavaFX ScrollPane滚动条已禁用

时间:2016-02-22 22:25:14

标签: javafx scenebuilder scrollpane

我在SceneBuilder中构建了一个布局,它有一个ScrollPane(在StackPane中),其中包含一个StackPane,其中包含一个包含ImageView的Group(对齐到中间左侧)。出于某种原因,无论我是使用Ctrl + P在SceneBuilder中预览还是在我的程序中运行,都会禁用水平滚动条。滚动条确实显示右侧有更多滚动到,但我无法滚动到它。它看起来像这样:

Disabled scrollbar

这是FXML:

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

<?import javafx.scene.Group?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.effect.DropShadow?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: white;" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <StackPane prefHeight="150.0" prefWidth="200.0" style="-fx-background-color: white;" BorderPane.alignment="CENTER">
         <children>
            <ScrollPane id="scoreScrollPane" fitToHeight="true" hbarPolicy="ALWAYS" prefHeight="0.0" prefWidth="0.0" vbarPolicy="NEVER">
               <content>
                  <StackPane alignment="CENTER_LEFT">
                     <children>
                        <Group id="scoreGroup" StackPane.alignment="CENTER_LEFT">
                           <children>
                              <ImageView id="scoreImage" fitHeight="150.0" fitWidth="3000.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@Untitled.png" />
                                 </image>
                              </ImageView>
                           </children>
                        </Group>
                     </children>
                  </StackPane>
               </content>
            </ScrollPane>
            <HBox id="toolbar" alignment="TOP_CENTER" prefHeight="100.0" prefWidth="200.0" spacing="8.0">
               <children>
                  <Button id="recordButton" mnemonicParsing="false" text="Record" />
                  <Button id="stopButton" mnemonicParsing="false" text="Stop" />
               </children>
               <effect>
                  <DropShadow />
               </effect>
            </HBox>
         </children>
      </StackPane>
   </center>
</BorderPane>

我尝试了AS_NEEDED和ALWAYS的水平滚动政策。

1 个答案:

答案 0 :(得分:1)

你遇到了很多问题(最重要的是带有你的控件的HBox会覆盖你的ScrollPane,否则会截取ScrollPane):

  1. 为您的ImageView设置preserveRatio="false"而不是preserveRatio="true",否则图片可能不会增长到您提供的fitWidth(因为它可能首先达到fitHeight限制而不再增加宽度)。
  2. 在您的HBox上设置maxHeight="-Infinity"(这将确保HBox的最大高度不会超过HBox的首选高度,否则HBox将拦截针对您的ScrollPane的鼠标点击)。要么是这个,要么为HBox设置pickOnBounds="false",这样即使它覆盖了ScrollPane,HBox也不会拦截ScrollPane的鼠标点击。
  3. 注意:调试布局大小,有时临时向区域添加背景或边框以查看其真实大小非常有用,例如style="-fx-background-color: red;"。< / p>

    此外,您可能不想将控件和图像放置在覆盖内容的StackPane中,而是使用VBox,而不是将其放在垂直而不是相互叠加的位置。