JavaFX ScrollPane布局


捲動視窗提供UI元素的可捲動檢視。
我們使用可捲動面板,當需要顯示有限的空間大內容。可捲動窗格視口,其將顯示內容的一部分,並且在必要時提供捲動條。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage stage) {
        stage.setWidth(500);
        stage.setHeight(500);
        Scene scene = new Scene(new Group());

        VBox root = new VBox();     

        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();


        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(browser);
        webEngine.loadContent("<b>yes? this is default content load.</b>");

        root.getChildren().addAll(scrollPane);
        scene.setRoot(root);

        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

上面的程式碼生成以下結果。

建立捲動窗格

以下程式碼使用jpg檔案建立一個影象,並將該影象新增到捲動窗格。如果影象較大,捲動窗格將顯示捲動條,我們可以使用它來檢視隱藏的部分。

Image img = new Image(getClass().getResourceAsStream("yourImage.jpg"));
ScrollPane sp = new ScrollPane();
sp.setContent(new ImageView(img));

可捲動ScrollPane

呼叫setPannable(true)方法通過單擊並移動滑鼠游標來預覽影象。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage stage) {
        Group root = new Group();
        Scene scene = new Scene(root, 500, 200);
        stage.setScene(scene);// =>  w w W .Y I I B  A I .c O  M

        Rectangle rect = new Rectangle(200, 200, Color.RED);
        ScrollPane s1 = new ScrollPane();
        s1.setPannable(true);
        s1.setPrefSize(120, 120);
        s1.setContent(rect);

        root.getChildren().add(s1);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

上面的程式碼生成以下結果。

捲動條策略

我們可以控制何時顯示捲動條的策略:

  • 總是
  • 決不
  • 必要時

setHbar策略和setar策略方法分別為水平和垂直捲動條指定捲動條策略。

sp.setHbarPolicy(ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);

調整捲動窗格中的元件大小

setFitToWidthsetFitToHeight方法設定為true以匹配特定維度。

預設情況下,FIT_TO_WIDTHFIT_TO_HEIGHT屬性都為false,可調整大小的內容保持其原始大小。

以下程式碼顯示如何設定JScrollPane以適合寬度。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
// from => Ww w . yI i  baI.C O  m 
public class Main extends Application {

    @Override
    public void start(Stage stage) {
        stage.setWidth(500);
        stage.setHeight(500);
        Scene scene = new Scene(new Group());

        VBox root = new VBox();     

        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();


        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setFitToWidth(true);

        scrollPane.setContent(browser);
        webEngine.loadContent("<b>asdf</b>");

        root.getChildren().addAll(scrollPane);
        scene.setRoot(root);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

上面的程式碼生成以下結果。

捲動操作

ScrollPane類允許檢索和設定水平和垂直方向上的內容的當前值,最小值和最大值。
以下程式碼顯示如何處理JScrollPane垂直值和水平值更改事件。