JavaFX ScrollPane

2021-01-15 14:40 更新

JavaFX教程 - JavaFX ScrollPane


滾動(dòng)窗口提供UI元素的可滾動(dòng)視圖。

我們使用可滾動(dòng)面板,當(dāng)我們需要顯示有限的空間大內(nèi)容??蓾L動(dòng)窗格具有將顯示內(nèi)容的一部分及其的視口必要時(shí)提供滾動(dòng)條。

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>asdf</b>");
         
        root.getChildren().addAll(scrollPane);
        scene.setRoot(root);
 
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

上面的代碼生成以下結(jié)果。




創(chuàng)建滾動(dòng)窗格

以下代碼從jpg文件創(chuàng)建一個(gè)圖像并添加圖像滾動(dòng)到滾動(dòng)窗格。 如果圖像較大,滾動(dòng)窗格將顯示滾動(dòng)條,我們可以使用它來(lái)查看隱藏的部分。

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

可滾動(dòng)ScrollPane

調(diào)用setPannable(true)方法通過(guò)單擊并移動(dòng)鼠標(biāo)光標(biāo)來(lái)預(yù)覽圖像。

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);

        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);
    }
}

上面的代碼生成以下結(jié)果。



滾動(dòng)條策略

我們可以控制何時(shí)顯示滾動(dòng)條的策略:

  • always
  • never
  • when necessary

setHbar策略和setar策略方法指定滾動(dòng)條策略分別為水平和垂直滾動(dòng)條。

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

調(diào)整滾動(dòng)窗格中的組件大小

將setFitToWidth或setFitToHeight方法設(shè)置為true以匹配特定維度。

默認(rèn)情況下,F(xiàn)IT_TO_WIDTH和FIT_TO_HEIGHT屬性都為false,并且可調(diào)整大小的內(nèi)容保持其原始大小。

以下代碼顯示如何設(shè)置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;

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);
    }
}



滾動(dòng)操作

ScrollPane類允許我們檢索和設(shè)置內(nèi)容的電流,最小值和最大值在水平和垂直方向。

下面的代碼顯示了如何處理JScrollPane垂直值和水平值更改事件。

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
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);

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

        s1.vvalueProperty().addListener(new ChangeListener<Number>() {
          public void changed(ObservableValue<? extends Number> ov,
              Number old_val, Number new_val) {
                  System.out.println(new_val.intValue());
          }
        });
        s1.hvalueProperty().addListener(new ChangeListener<Number>() {
          public void changed(ObservableValue<? extends Number> ov,
              Number old_val, Number new_val) {
                  System.out.println(new_val.intValue());
          }
      });        
        root.getChildren().add(s1);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

上面的代碼生成以下結(jié)果。




以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)