JavaFX - ScrollPane内容扭曲滚动问题

时间:2015-08-24 11:59:39

标签: java javafx javafx-8

我遇到了渲染JavaFX滚动窗格的问题。有时,当我滚动窗格时,包含的视图看起来像是" teared"或者只是遗漏某些细节。如果用户改变应用程序中的当前焦点(即通过点击新元素),则可以修复撕裂。请看下面的图片。

The scroll view, with tearing

我制作了一个可以复制问题的示例程序:

public class ScrollingView extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Scrollview!");        
        ScrollPane root = new ScrollPane();
        root.paddingProperty().setValue( new Insets(10, 10, 10, 10));
        GridPane grid = new GridPane();     

        for(int i = 0; i < 20; i++)
            grid.addRow( i, createSpinner() );

        root.setContent(grid);
        root.vvalueProperty().addListener( (ov, oldV, newV) -> root. );

        primaryStage.setScene(new Scene(root, 300, 150));
        primaryStage.show();
    }

    private Node[] createSpinner(){
        Node[] nodes = new Node[2];

        nodes[0] = new Label("Spinner");

        Spinner<Integer> spinner = new Spinner<>();
        spinner.setEditable(false);
        IntegerSpinnerValueFactory spinnerFactory = new IntegerSpinnerValueFactory(1, 10, 5, 1);
        spinner.setValueFactory(spinnerFactory);    
        nodes[1] = spinner;

        return nodes;
    }
}

我搜索了这个问题,但无法提出解决方案。有谁知道导致这个问题的原因,有没有办法解决它?

谢谢// Simon

1 个答案:

答案 0 :(得分:2)

当填充应用于Spinner时,ScrollPane渲染会以某种方式失真。评论

root.paddingProperty().setValue( new Insets(10, 10, 10, 10));

解决了这个问题。它可能是一个错误,你宁愿提交它。将填充添加到另一个外部布局而不是ScrollPane可以选择解决方法:

VBox vbox =new VBox(root);
vbox.setPadding( new Insets(10, 10, 10, 10));
primaryStage.setScene(new Scene(vbox, 300, 150));