选择TreeItem会显示不同的场景

问题描述 投票:0回答:1

我正在创建一个显示具有以下 TreeItems 的 TreeTable 的舞台:照片、文件和视频。当用户选择其中一项时,我希望场景发生更改并显示照片、文件或视频。

这是 TreeTable 的片段: enter image description here

我明白了如何获取树项的值并显示。

public void selectedItem(){
        TreeItem<String> item = dataTable.getSelectionModel().getSelectedItem();
        if(item != null){
            System.out.println(item.getValue());
        } else if (item == pngFiles) {
            System.out.println("You've selected PNG Files");

        }
        
}

我还尝试操作此代码块以使项目变量等于定义的树项目之一。这不起作用。

fxml javafx-11
1个回答
0
投票

以下内容可能会有所帮助。您可能需要

tree.getSelectionModel().selectedItemProperty().addListener

import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class App extends Application {

    private final Node rootIcon = new ImageView(
        //new Image(getClass().getResourceAsStream("folder_16.png"))
    );

    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tree View Sample");        
        
        TreeItem<String> rootItem = new TreeItem ("Inbox", rootIcon);
        rootItem.setExpanded(true);
        for (int i = 1; i < 6; i++) {
            TreeItem<String> item = new TreeItem ("Message" + i);            
            rootItem.getChildren().add(item);
        }        
        TreeView<String> tree = new TreeView (rootItem);   
        
        BorderPane root = new BorderPane();
        root.setCenter(getViewOne());
        root.setLeft(tree);
        
        tree.getSelectionModel().selectedItemProperty().addListener((obs, oldTreeItem, newTreeItem) -> {
            if(newTreeItem != null)
            {
                if(newTreeItem == rootItem.getChildren().get(0))
                {
                    root.setCenter(getViewOne());
                }
                if(newTreeItem == rootItem.getChildren().get(1))
                {
                    root.setCenter(getViewTwo());
                }
                else
                {
                    System.out.println("Write code for other cases!");
                }
            }
        });
        
        primaryStage.setScene(new Scene(root, 500, 500));
        primaryStage.show();
    }
    
    
    public HBox getViewOne()
    {
        return new HBox(new Label("View One"));
    }
    
    public StackPane getViewTwo()
    {
        return new StackPane(new Label("View Two"));
    }
}

更改代码来自 https://docs.oracle.com/javafx/2/ui_controls/tree-view.htm

© www.soinside.com 2019 - 2024. All rights reserved.