如何在 ScrollPane 中设置 vBarPolicy? JavaFX

How to set vBarPolicy in ScrollPane ? JavaFX

我正在尝试将垂直滚动条设置为始终可见。 但我想这样做,只使用 fxml。目前我正在尝试这样做,就像这样:

  <ScrollPane fitToHeight = "true" fitToWidth = "true">
     <vbarPolicy>
        <ScrollBarPolicy fx:constant = "ALWAYS" />
     </vbarPolicy>
     <LogView fx:id = "logViewLog" />
  </ScrollPane>

但是我得到了这个错误:

Caused by: javafx.fxml.LoadException: ScrollBarPolicy is not a valid type.

推荐方案

直接将vbarPolicy属性设置为ScrollBarPolicy枚举类型的字符串值:vbarPolicy="ALWAYS".

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

<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Label?>

<ScrollPane fitToHeight = "true" fitToWidth = "true" vbarPolicy="ALWAYS">
    <Label text="The quick brown fox jumped over the lazy dog" minHeight="100" wrapText="true" alignment="TOP_LEFT"/>
</ScrollPane>

这适用于任何枚举类型 属性。

参见示例中的实例如何alignment="TOP_LEFT",类似地为Label设置Pos枚举类型alignment属性的值。

备用解决方案

正如 Slaw 在评论中指出的那样,您也可以使用 fx:constant 语法以冗长的方式执行此操作:

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

<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane.ScrollBarPolicy?>

<ScrollPane fitToHeight = "true" fitToWidth = "true" xmlns:fx="http://javafx.com/fxml">
    <vbarPolicy>
        <ScrollPane.ScrollBarPolicy fx:constant = "ALWAYS" />
    </vbarPolicy>
    <Label text="The quick brown fox jumped over the lazy dog" minHeight="100" wrapText="true" alignment="TOP_LEFT"/>
</ScrollPane>

如果您这样做,请确保您:

  1. 定义 fx 命名空间:

    xmlns:fx="http://javafx.com/fxml"
    
  2. 导入 ScrollBarPolicy 类型:

    <?import javafx.scene.control.ScrollPane.ScrollBarPolicy?>
    

我更喜欢使用前面概述的直接字符串转换,而不是 fx:constant 版本。