JavaFX技巧30:带有DropShadow的ScrollPane
生活随笔
收集整理的這篇文章主要介紹了
JavaFX技巧30:带有DropShadow的ScrollPane
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近,在我的一個項目中,我發現用戶很難看到ScrollPane實例的內容當前是否已滾動。 一種更清晰的方法是在滾動窗格的頂部添加陰影。
這也是Google的Material Design建議的。 所以我嘗試了一下。 在我的解決方案中,我只是向ScrollPane添加了一個區域,并在對其進行布局時將其移出ScrollPane的視口邊界,因此只有應用于該區域的陰影效果仍可以到達該區域。
為了真正確保該區域不可見,我還必須在ScrollPane上設置一個剪輯。 盡管我必須承認我不是100%確信這是實現此目標的最佳方法,但它的效果很好。 因此,如果有人有任何建議/替代方法,請發表評論。
在下面您將看到滾動我們應用程序屏幕之一的屏幕截圖之前和之后的內容。
滾動之前
滾動后
順便說一句:我實現了這種方式,使陰影不會突然出現,而是逐步移入視口,具體取決于用戶滾動了多遠。 要查看此內容,您需要非常緩慢地向下滾動。
ShadowScrollPane的代碼可以在GitHub的以下要點中找到:
package uk.co.senapt.desktop.shell;import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.control.ScrollPane; import javafx.scene.layout.Region; import javafx.scene.shape.Rectangle;/*** Created by lemmi on 23.08.17.*/ public class ShadowScrollPane extends ScrollPane {private Region shadow = new Region();public ShadowScrollPane() {super();init();}public ShadowScrollPane(Node content) {super(content);init();}private void init() {skinProperty().addListener(it -> {getChildren().addAll(shadow);});setFitToWidth(true);setVbarPolicy(ScrollBarPolicy.NEVER);setHbarPolicy(ScrollBarPolicy.NEVER);shadow.setManaged(false);shadow.setStyle("-fx-pref-height: 10;" +"-fx-background-color: black;" +"-fx-effect: dropshadow(gaussian, rgba(0, 0, 0, .75), 20, 0.19, 0, 6);");shadow.getStyleClass().add("shadow");shadow.visibleProperty().bind(showShadowProperty());shadow.setMouseTransparent(true);shadow.visibleProperty().bind(vvalueProperty().greaterThan(0));Rectangle clip = new Rectangle();clip.widthProperty().bind(widthProperty());clip.heightProperty().bind(heightProperty());setClip(clip);vvalueProperty().addListener(it -> {if (lastOffset != computeOffset()) {requestLayout();}});showShadowProperty().addListener(it -> requestLayout());}private final BooleanProperty showShadow = new SimpleBooleanProperty(this, "showShadow", true);public final BooleanProperty showShadowProperty() {return showShadow;}public final boolean isShowShadow() {return showShadow.get();}public final void setShowShadow(boolean show) {showShadow.set(show);}private final int SHADOW_HEIGHT = 30;@Overrideprotected void layoutChildren() {super.layoutChildren();if (isShowShadow()) {Insets insets = getInsets();double w = getWidth();double offset = computeOffset();shadow.resizeRelocate(-10, insets.getTop() - shadow.prefHeight(-1) - SHADOW_HEIGHT + offset, w + 20, shadow.prefHeight(-1) - 1);lastOffset = offset;}}private double lastOffset = 0;private double computeOffset() {if (getContent() != null) {return Math.min(getVvalue() * getContent().prefHeight(-1), SHADOW_HEIGHT);}return 0;} }翻譯自: https://www.javacodegeeks.com/2018/06/javafx-scrollpane-dropshadow.html
總結
以上是生活随笔為你收集整理的JavaFX技巧30:带有DropShadow的ScrollPane的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公司电脑如何禁止电脑安装程序软件如何禁止
- 下一篇: 电脑的硬件配置如何查看怎么查看电脑的硬件