在javafx listview中获取有关单元格的信息

时间:2018-01-23 14:27:50

标签: java listview javafx

我有一个Listview,用Fxml制作,其中的元素是通过一个可观察的列表添加的。我想,当用户双击某个节点时,获取有关该节点的数据。我已经处理了双击和其他所有内容,但是我需要获取被点击的节点的名称才能从hashmap中获取数据等等......我尝试使用if(e.getTarget() == ListCell)但它告诉我“表达预期”就好像它是一个枚举。

我知道某个地方可能有重复,但我找不到任何问题的表述......所以,我问你,我怎么得到节点的名称并检查是否点击发生在节点上或“列表视图的空白”中。

编辑:按名称,我的意思是显示名称。

1 个答案:

答案 0 :(得分:0)

这是实现我认为你要问的一种方法。这会使用setOnMouseClicked中的setCellFactory

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ListViewExperiments extends Application
{

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        primaryStage.setTitle("ListView Experiment 1");

        Label label = new Label("Hello World!");

        ListView<Person> listView = new ListView();
        listView.setCellFactory(lv -> new ListCell<Person>()
        {
            @Override
            public void updateItem(Person item, boolean empty)
            {
                super.updateItem(item, empty);
                if (empty) {
                    setText(null);
                    setOnMouseClicked(null);
                }
                else {
                    setText(item.getFirstName() + " " + item.getLastName());
                    setOnMouseClicked(event -> {
                        if (event.getClickCount() == 2) {
                            label.setText(item.getFirstName() + item.getLastName());
                        }
                    });
                }

            }
        });

        listView.getItems().add(new Person("a", "b"));
        listView.getItems().add(new Person("c", "d"));
        listView.getItems().add(new Person("e", "f"));

        VBox vBox = new VBox(listView, label);

        Scene scene = new Scene(vBox, 300, 120);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args)
    {
        Application.launch(args);
    }
}