我用ListView<ImageView>
制作了一些图像
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class MyApp extends Application {
@Override
public void start(Stage stage) throws Exception {
Image img = new Image("main/img.png");
ObservableList<ImageView> list = FXCollections.observableArrayList();
for (int i = 0; i < 4; i++) {
ImageView iView = new ImageView(img);
list.add(iView);
}
ListView<ImageView> listView = new ListView<>(list);
listView.setOrientation(Orientation.HORIZONTAL);
Group root = new Group(listView);
Scene scene = new Scene(root, 500, 500);
stage.setScene(scene);
stage.sizeToScene();
stage.show();
}
public static void main(String[] args) throws Exception {
launch(args);
}
}
但这就是它的样子
我希望图像完全覆盖每个单元格 - 没有插入,没有填充,没有滚动条。只是他们之间的边界。
我想绑定列表视图的heightProperty
,但它是只读的。图像视图也没有大小属性,但我认为它是获取空间而不是图像视图的单元格。
我还试图像这样添加Pane
:
Image img = new Image("main/img.png");
ObservableList<Pane> list = FXCollections.observableArrayList();
for (int i = 0; i < 4; i++) {
ImageView iView = new ImageView(img);
Pane pane = new BorderPane(iView);
pane.setStyle("-fx-background-color: yellow;");
list.add(pane);
}
ListView<Pane> listView = new ListView<>(list);
listView.setOrientation(Orientation.HORIZONTAL);
给出了这个结果
以及渲染器
list.setCellFactory((ListView<ImageView> l) -> new FitCell());
但您也无法绑定单元格的属性。如何在不手动设置高度和宽度的情况下执行此操作?
答案 0 :(得分:1)
听起来你根本不想要ListView
。将ImageView
放入HBox
,并将HBox
包裹在ScrollPane
中。您可以使滚动窗格成为可能,并根据需要设置滚动条策略。这使您可以完全控制布局等,而无需担心虚拟化单元的复杂性。
E.g。
HBox hbox = new HBox();
Image img = new Image("main/img.png");
for (int i = 0; i < 4; i++) {
ImageView iView = new ImageView(img);
Pane pane = new StackPane(iView);
pane.setStyle("-fx-background-color: yellow;");
hbox.getChildren().add(pane);
}
ScrollPane scroller = new ScrollPane(hbox);
scroller.setPannable(true);
scroller.setFitToHeight(true);
scroller.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
Group root = new Group(scroller);
// ...
您可能需要在窗格上设置其他样式,例如填充和边框等,但这应该足以让你得到你想要的东西。