Scala 如何在JavaFXWebView中隐藏滚动条

Scala 如何在JavaFXWebView中隐藏滚动条,scala,webview,hide,javafx,scrollbars,Scala,Webview,Hide,Javafx,Scrollbars,我正在尝试删除JavaFXWebView中的滚动条。 在论坛上搜索,建议如下使其隐形: browser.getChildrenUnmodifiable().addListener(new ListChangeListener<Node>() { @Override public void onChanged(Change<? extends Node> change) { Set<Node> deadSeaScrolls = brows

我正在尝试删除JavaFXWebView中的滚动条。 在论坛上搜索,建议如下使其隐形:

browser.getChildrenUnmodifiable().addListener(new ListChangeListener<Node>() {
    @Override public void onChanged(Change<? extends Node> change) {
        Set<Node> deadSeaScrolls = browser.lookupAll(".scroll-bar");
        for (Node scroll : deadSeaScrolls) {
            scroll.setVisible(false);
        }
    }
})
browser.getChildrenUnmodifiable().addListener(新ListChangeListener()){

@Override public void onChanged(Change我编写了滚动条,隐藏了您所指的代码和

我使用WinXPsp3、JavaFX2.2b13、JDK7u6b14ea再次尝试了它,它仍然适用于我

我从未尝试过从Scala访问代码,因此您可能遇到了一些JavaScala互操作性问题。Java没有特性,因此您收到的错误可能与Scala相关。我在您的问题中添加了一个Scala标记,因此可能有Scala专业人士可以提供帮助

下面是一个简短的、可编译的测试应用程序,我用来重新检查功能

import java.util.Set;
import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.collections.ListChangeListener.Change;
import javafx.scene.*;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

// demos showing a webview which does not visibly display scrollbars.
public class NoScrollWebView extends Application {
  public static void main(String[] args) { launch(args); }
  @Override public void start(Stage primaryStage) {
    // show a doc in webview.
    final WebView webView = new WebView();
    webView.getEngine().load("http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm");
    primaryStage.setScene(new Scene(webView));
    primaryStage.show();

    // hide webview scrollbars whenever they appear.
    webView.getChildrenUnmodifiable().addListener(new ListChangeListener<Node>() {
      @Override public void onChanged(Change<? extends Node> change) {
        Set<Node> deadSeaScrolls = webView.lookupAll(".scroll-bar");
        for (Node scroll : deadSeaScrolls) {
          scroll.setVisible(false);
        }
      }
    });
  }
}
import java.util.Set;
导入javafx.application.application;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ListChangeListener.Change;
导入javafx.scene.*;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
//演示显示不显示滚动条的webview。
公共类NoScrollWebView扩展了应用程序{
公共静态void main(字符串[]args){launch(args);}
@覆盖公共无效开始(阶段primaryStage){
//在webview中显示文档。
最终WebView WebView=新WebView();
webView.getEngine().load(“http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm");
设置场景(新场景(网络视图));
primaryStage.show();
//无论何时出现Web视图滚动条,都隐藏它们。
webView.getChildrenUnmodifiable().addListener(新ListChangeListener()){

@Override public void onChanged(Change最简单的方法是为场景CSS文件中的.scroll bar组件提供NoOp外观

因此,在CSS中输入如下内容:

.scroll-bar {
    -fx-skin: "org.acme.visual.NoOpScrollbarSkin";
}
和子类SkinBase class:

public class NoOpScrollbarSkin extends SkinBase<ScrollBar,ScrollBarBehavior> {
    public NoOpScrollbarSkin(ScrollBar scrollBar, ScrollBarBehavior scrollBarBehavior) {
        super(scrollBar, scrollBarBehavior);
    }

    public NoOpScrollbarSkin(ScrollBar scrollBar) {
        super(scrollBar, new ScrollBarBehavior(scrollBar));
    }
}
公共类NoOpScrollbarSkin扩展了SkinBase{
公共NoOpScrollbarSkin(滚动条滚动条、滚动条行为或滚动条行为){
超级(滚动条、滚动条行为);
}
公共NoOpScrollbarSkin(滚动条滚动条){
超级(滚动条,新的滚动条行为(滚动条));
}
}

编辑:由于对com.sun.javafx.scene.control.skin.ScrollBarSkin的转换,此示例似乎不适用于WebView。解决方案并不比以前检查节点更改更好,必须对ScrollBarSkin进行子类化以覆盖行为。

设置WebView时添加以下代码:

engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>()
{

    public void changed(ObservableValue<? extends State> o, State old, final State state)
    {
        if (state == State.RUNNING || state == State.SUCCEEDED)
        {
            // System.out.println("Page: " + state + ": " + engine.getLocation());
            engine.executeScript("document.body.style.overflow = 'hidden';");
        }
    }

});
engine.getLoadWorker().stateProperty().addListener(新的ChangeListener())
{

public void changed(observeValueI可以通过添加以下内容来删除滚动条 css块到我的全局html样式表

body {
   overflow-x: hidden;
   overflow-y: hidden;
}