私は同じサイズの2次元配列からのデータを表し、ScrollPane
に配置されているので、周囲をパンするのに使うことができる均一なサイズの正方形の20x20 GridPane
です。 GridPane
のピクセルの幅と高さの両方は、ScrollPane
のそれぞれのサイズよりもはるかに大きいです。ScrollPaneビューポートの中央グリッドスクエア
私の問題は、指定された座標のセットにあるGridPane
の正方形のScrollPane
のビューポートを中心にする機能的な方法を作ることができなかったことです。
私が利用しようとしているscrollPane.setHvalue(double)
とscrollPane.setVvalue(double)
の私の理解は、それらに渡されるdouble値がスクロールを設定する軸のパーセンテージであるということです。
private void centerViewOn(double x, double y){
scrollPane.setHvalue(x/grid.getDimensionX());
scrollPane.setVvalue(y/grid.getDimensionY());
}
grid
が唯一のクラスのインスタンスである:私はそれを想定したコードを書くときしかし、それは四角でも、ビューポート上の任意の場所にされていないと、時々、意図された広場にビューを中央に失敗しましたこの質問との関連性は、グリッドの寸法を持ち、double x
とdouble y
は、中央揃えされた四角形のGridPaneのx、y座標です。
私は間違っていますが、どうすればこの問題を解決できますか?
EDIT:スクロールペインの水平スクロール値はscrollPane.getHmin()
とscrollPane.getHmax()
の間で変動し
private ScrollPane scrollPane;
private GridPane gridPane;
private double dimensionX;
private double dimensionY;
@Override
public void start(Stage primaryStage) {
scrollPane = new ScrollPane();
gridPane = new GridPane();
dimensionX = 20;
dimensionY = 20;
Pane temp;
for(int x = 0; x < dimensionX; ++x){
for(int y = 0; y < dimensionY; ++y){
temp = new Pane();
temp.setPrefSize(100, 100);
temp.setOnMouseClicked(e -> {
centerViewOn(GridPane.getColumnIndex((Pane)e.getSource()), GridPane.getRowIndex((Pane)e.getSource()));
((Pane)e.getSource()).setStyle("-fx-background-color: blue");
});
gridPane.add(temp, x, y);
}
}
gridPane.setGridLinesVisible(true);
scrollPane.setContent(gridPane);
primaryStage.setScene(new Scene(scrollPane));
primaryStage.show();
}
private void centerViewOn(double x, double y){
double viewportWidth = scrollPane.getViewportBounds().getWidth();
double maxHscrollPixels = gridPane.getWidth() - viewportWidth;
double hscrollPixels = viewportWidth/2 - (x + 0.5) * dimensionX/20;
scrollPane.setHvalue(hscrollPixels/maxHscrollPixels);
double viewportHeight = scrollPane.getViewportBounds().getHeight();
double maxVscrollPixels = gridPane.getHeight() - viewportHeight;
double vscrollPixels = viewportHeight/2 - (y + 0.5) * dimensionY/20;
scrollPane.setVvalue(vscrollPixels/maxVscrollPixels);
}
、あなたは彼らがスクロールを停止したときに '' ScrollPane'がgrid'のビューを中央にしたいですか? –