gpt4 book ai didi

java - 像android一样的javafx中的可扩展列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:08 29 4
gpt4 key购买 nike

Android中有这样一个ListView enter image description here

这如何在 Java FX 中实现,任何链接、建议或自定义组件?我目瞪口呆,没有找到任何东西?然而密切相关的是 Accordion ,但它不适合外观和感觉。它应该像一个具有均匀大小单元格的列表。有帮助吗?我正在使用 JavaFx 2。

编辑:

正如评论中所建议的那样, TreeView 可以帮助我。好的。但是我尝试使用 TreeView 并且我还阅读了这篇博文 http://myjavafx.blogspot.com/2012/03/treeview-with-data-source.html但我怎样才能自定义这一行。我的意思是如何将我的 Alerts POJO 中的数据映射或绑定(bind)到不同的标签和 ImageView 。例如

TreeView<Alerts> tv = new TreeView<>(new Alerts("Incedent Name","Alerts Title",
"Short Message","Sender",new Date(),new Image("titleImage.png"),
typeColor));

所有这些值都映射到相应的标签和图像到一行中。由于 JavaFX 现在没有提供可扩展列表,所以我认为这种方法。任何机构都可以提供建议或示例映射代码等吗?

最佳答案

这是一个启动示例代码:

public class TreeDemo extends Application {

@Override
public void start(Stage stage) {
TreeItem<Alert> rootNode = new TreeItem<>(new Alert("dummy", "dummy"));
rootNode.setExpanded(true);
TreeItem<Alert> groupNode = new TreeItem<>(new Alert("group item", "group item"));
groupNode.getChildren().addAll(new TreeItem<>(new Alert("sub item 1", "sub item 1")),
new TreeItem<>(new Alert("sub item 2", "sub item 2")),
new TreeItem<>(new Alert("sub item 3", "sub item 3")));

rootNode.getChildren().addAll(new TreeItem<>(new Alert("item 1", "item 1")),
groupNode,
new TreeItem<>(new Alert("item 2", "item 2")),
new TreeItem<>(new Alert("item 3", "item 3")));

VBox box = new VBox();
final Scene scene = new Scene(box, 400, 300);
scene.setFill(Color.LIGHTGRAY);

TreeView<Alert> treeView = new TreeView<>(rootNode);
treeView.setShowRoot(false);
treeView.setCellFactory(new Callback<TreeView<Alert>, TreeCell<Alert>>() {
@Override
public TreeCell<Alert> call(TreeView<Alert> p) {
return new AlertTreeCell();
}
});

box.getChildren().add(treeView);
stage.setScene(scene);
stage.show();
}

private final class AlertTreeCell extends TreeCell<Alert> {

private final AnchorPane anchorPane;
private final Label label;
private final Button button;

public AlertTreeCell() {
anchorPane = new AnchorPane();
label = new Label();
button = new Button();
anchorPane.getChildren().addAll(label, button);
anchorPane.setStyle("-fx-border-color: gray");
anchorPane.setPadding(new Insets(5));
AnchorPane.setRightAnchor(button, 10.0);
AnchorPane.setLeftAnchor(label, 15.0);
}

@Override
public void updateItem(Alert item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(null);
label.setText(item.getStatus());
button.setText(item.getName());
setGraphic(anchorPane);
}
}
}

public static class Alert {

private final SimpleStringProperty name;
private final SimpleStringProperty status;

private Alert(String name, String department) {
this.name = new SimpleStringProperty(name);
this.status = new SimpleStringProperty(department);
}

public String getName() {
return name.get();
}

public void setName(String fName) {
name.set(fName);
}

public String getStatus() {
return status.get();
}

public void setStatus(String fName) {
status.set(fName);
}
}

public static void main(String[] args) {
Application.launch(args);
}
}
  • TreeView 中只有一个根,所以要像屏幕一样显示列表

    rootNode.setExpanded(true);
    treeView.setShowRoot(false);
  • 我使用 Anchorpane 作为单元格的布局,因为它似乎更适合您的图形用户界面设计。

  • 您可能应该使用 css 文件,并将所有内联样式移入其中

关于java - 像android一样的javafx中的可扩展列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097213/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com