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