我有行和列的任意数量GridPane,并填写每个单元与ImageView的。
现在,这GridPane被包含在AnchorPane,所以当窗口得到调整的GridPane增大或缩小罚款,但ImageViews不改变其大小。
我有什么做的,使的ImageView利用其在GridPane单元的大小?
我有行和列的任意数量GridPane,并填写每个单元与ImageView的。
现在,这GridPane被包含在AnchorPane,所以当窗口得到调整的GridPane增大或缩小罚款,但ImageViews不改变其大小。
我有什么做的,使的ImageView利用其在GridPane单元的大小?
这可能有两方面的原因。
1)你可以为网格窗格中没有定义行和列的约束。 即使当GridPane
的增长,它的细胞不一定会超越他们的首选大小。 实现这一目标的最佳方式是用百分比宽度/高度定义约束,像这样:
public class ImageGrid extends Application {
@Override
public void start(final Stage stage) throws Exception {
final GridPane pane = new GridPane();
for (int i = 0; i < 10; i++) {
final ImageView imageView = new ImageView(new Image("..."));
pane.getChildren().add(imageView);
GridPane.setConstraints(imageView, i%5, i/5);
}
pane.getColumnConstraints().addAll(
columnWithPercentage(20),
columnWithPercentage(20),
columnWithPercentage(20),
columnWithPercentage(20),
columnWithPercentage(20)
);
pane.getRowConstraints().addAll(
rowWithPercentage(50),
rowWithPercentage(50)
);
final Scene scene = new Scene(pane);
stage.setScene(scene);
stage.setWidth(800);
stage.setHeight(600);
stage.show();
}
private ColumnConstraints columnWithPercentage(final double percentage) {
final ColumnConstraints constraints = new ColumnConstraints();
constraints.setPercentWidth(percentage);
return constraints;
}
private RowConstraints rowWithPercentage(final double percentage) {
final RowConstraints constraints = new RowConstraints();
constraints.setPercentHeight(percentage);
return constraints;
}
public static void main(String[] args) {
Application.launch(args);
}
}
这将创建一个网格的5x2 ImageView
小号至极,将填补网格窗格的整个空间同样。
2)上述解决方案将增加你的形象的看法,但ImageView
直到被告知类本身不会拉伸图像超出其正常大小。 你可能有绑定ImageView#fitWidthProperty
和ImageView#fitHeightProperty
,以及如果你想将图像按比例增加当电网扩大。
我是一个初学者到JavaFX和我有类似的问题。 我有其中载有BorderPane的AnchorPane。 所述BorderPane的中心包含在GridPane(gridPaneMaze)。 此gridPaneMaze使用的阵列的ImageView [7] [7]的图像以填充我gridpane的每个单元具有正方形.png文件。
我想我的图片与窗口的高度变化。 因为我用正方形,列的宽度应自动改变。
起初,当我调整我的窗口,我的专栏是比我更广阔的图像和图像的高度是要大的行。
试错后,我发现,这样做有问题:
IMAGES我有for循环的行和列之间以及在每个小区中我设置与相应的图像的ImageView的(这始终是一个正方形)横动,并用于此的高度结合(I由行数除以gridpane的高度):
images[i][j].fitHeightProperty().bind(gridPaneMaze.heightProperty().divide(7));
images[i][j].setPreserveRatio(true);
我想你也可以通过列数使用widthProperty和鸿沟。 但是,由于大多数显示器比宽度更小的高度,我使用的高度。
GRIDPANE:
我做了我gridPane与FXML而是说对价值观没有什么区别。
<BorderPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<center>
<GridPane fx:id="gridPaneMaze" centerShape="false" minHeight="0.0" minWidth="0.0" BorderPane.alignment="TOP_LEFT">
<columnConstraints>
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
</columnConstraints>
<rowConstraints>
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
</rowConstraints>
<children>
//...
</children>
<BorderPane.margin>
<Insets left="10.0" top="10.0" />
</BorderPane.margin>
</GridPane>
</center>
BORDERPANE:我添加了一个borderpane我anchorpane,所以我把所有锚为“0”。
GRIDPANE:有minWidth 0和0了minHeight设置我没有prefWidth,prefHeight,maxWidth和maxHeight。
ROWS:我设置什么,但垂直对齐中心(没有了minHeight,maxHeight的prefHeight)
列:我设置什么,但横向对齐为中心(无minWidth,maxWidth的prefWidth)
希望这有助于...